NPD.CreatedOn
定义为datetime
数据类型列(在SQL Server中)。
SELECT *
FROM NPDMaster NPD
WHERE DATEDIFF(MONTH, CONVERT(VARCHAR(7), NPD.CreatedOn, 126), CONVERT(VARCHAR(30), GETDATE(), 126)) <= 6
我得到了这个错误:
从字符串转换日期和/或时间时转换失败。
我可以试着解决这个问题吗?
NPD.CreatedOn
定义为datetime
数据类型列(在SQL Server中)。
SELECT *
FROM NPDMaster NPD
WHERE DATEDIFF(MONTH, CONVERT(VARCHAR(7), NPD.CreatedOn, 126), CONVERT(VARCHAR(30), GETDATE(), 126)) <= 6
我得到了这个错误:
从字符串转换日期和/或时间时转换失败。
我可以试着解决这个问题吗?
2条答案
按热度按时间xytpbqjk1#
不要在列的
WHERE
中使用DATEDIFF
之类的内容,这样的查询不是可SARGable的,因此性能可能(将)很差。如果您想要日期在6个月前的月初或之后的行,则在GETDATE()
/SYSDATETIME()
/等上执行日期逻辑:SQL Server没有“月份开始”功能,但您可以使用
EOMONTH
,然后添加一天:6psbrbz92#
您不需要将
datetime
值转换为文本。DATEDIFF()
预期datetime
值作为第二个和第三个参数:错误的实际原因(如文档中所述)是*...DATEDIFF隐式地将字符串文字转换为DateTime2类型*。