MSSQL Server 2008 从字符串转换日期和/或时间时转换失败错误


MSSQL Server 2008 Conversion failed when converting date and/or time from character string Error

>我当前收到 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 和转换都会导致性能问题。尝试删除日期差异并以日期时间格式传递开始日期/结束日期。