[英]PHP mssql_query errors when converting date and/or time from character string
我正在使用PHP查詢SQL Server 2008 R2上的某些數據並收到以下錯誤:
這是代碼塊:
3 <?php // Initialise all database actions
4 //IP of server
5 $server = 'x.x.x.x';
6
7 // Connection to MSSQL - possibly use password file
8 $link = mssql_connect($server, 'user', 'pass');
9 if (!$link) {
10 die('Something went wrong while connecting to MSSQL');
11 }
12
13 // Declare query to return BSC_Name, BSC_Owner and
14 $qBSCInfo = mssql_query('SELECT * FROM dbo.BSC_Info;', $link);
15
16 ?>
最初,我將下面的SQL作為參數傳遞給mssql_query,但是在收到錯誤后,在查詢“ BSC_Info”上方創建了數據庫視圖(具有適當的權限),以防查詢過於復雜而使mssql_query無法處理:
SELECT DISTINCT
dbo.BSC.BSC_ID,
dbo.BSC.BSC_Name,
dbo.BSC.BSC_Owner,
DATEDIFF(M, MAX(CONVERT(DATETIME, LEFT(dbo.BSCDataSet.DatePeriod, 4)
+ RIGHT(dbo.BSCDataSet.DatePeriod, 2) + '01')), CONVERT(DATETIME, LEFT(CONVERT(VARCHAR, GETDATE(), 120), 4) + RIGHT(LEFT(CONVERT(VARCHAR, GETDATE(),
120), 7), 2) + '01')) AS Periods_to_Current
FROM dbo.BSC
LEFT OUTER JOIN dbo.BSCDataSet
ON dbo.BSC.BSC_ID = dbo.BSCDataSet.BSC_ID
GROUP BY dbo.BSC.BSC_ID, dbo.BSC.BSC_Name, dbo.BSC.BSC_Owner
為了澄清起見,該查詢在SQL Server Management Studio中起作用,它從表中返回一些字段以及當前日期和較早日期(以VARCHAR-YYYYMM格式存儲在數據庫中)之間的差異(以月為單位)。 為了防止部分月份出現任何問題,我將比較日期設置為該月的第一天。 我敢肯定有一種更優雅的方法可以做到這一點,但是我幾乎沒有SQL Server經驗,或者說PHP也沒有!
數據類型為:
任何幫助將非常感激。 歡呼大家!
因此,此代碼存在許多問題:
我現在將代碼修改為更合適的代碼(並且可以正常工作):
SELECT
dbo.BSC.BSC_ID,
dbo.BSC.BSC_Name,
dbo.BSC.BSC_Owner,
CASE maxview.maxDate
WHEN NULL THEN NULL
ELSE DATEDIFF(M,CONVERT(DATETIME, LEFT(maxview.maxdate, 4)+ RIGHT(maxview.maxdate, 2) + '01', 121),GETDATE())
END
FROM dbo.BSC
LEFT OUTER JOIN (SELECT BSC_ID, MAX(dbo.BSCDataSet.DatePeriod) as maxDate
FROM dbo.BSCDataSet GROUP BY BSC_ID) maxview
ON dbo.BSC.BSC_ID = maxview.BSC_ID;
希望這可以幫助某人!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.