>我当前收到 MSSQL Server 2008 错误:Conversion failed when converting date and/or time from character string.
我已经检查了以下线程,但仍然没有运气:
插入日期时间时从字符串转换日期和/或时间时转换失败在 SQL SERVER 2008 中从字符串转换日期和/或时间时转换失败
这是查询(我使用的是PHP的PDO SQLSRV(:
SELECT ISNULL(MYDATE,'None') AS MYDATE,
ISNULL(CAST(rnm AS NVARCHAR(50)),'None') AS Rnm,
DATENAME(dw, MYDATE) as nameOfDay,
FROM tab1
INNER JOIN rnm ON (tab1.rte = rnm.rte)
WHERE DATEDIFF(S, '1970-01-01', MYDATE) >= :startDate
AND DATEDIFF(S, '1970-01-01', MYDATE) <= :endDate
GROUP BY MYDATE, CAST(rnm AS NVARCHAR(50)) WITH ROLLUP
MYDATE 字段属于 MSSQL 中的 datetime
类型。 我尝试将每个 MYDATE 变量和1970-01-01
全部转换为日期时间,但我仍然收到错误。
不幸的是,"rnm"被转换为VARCHAR,因为它仍然是一个使用"文本"类型的旧数据库。
谢谢。
---更新:
$startDate = strtotime($_GET['startDate'] . " 00:00:00");
$endDate = strtotime($_GET['endDate'] . " 23:59:59");
然后通过 bindParam()
将上述内容绑定到准备好的变量。
您按 MYDATE 分组,它是
日期时间而不是 IsNull(MYDATE,'None'(,它是 varchar,有时将"None"存储为值。WHERE 子句中的所有那些 DATEDIFF 和转换都会导致性能问题。尝试删除日期差异并以日期时间格式传递开始日期/结束日期。