[英]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.