在以下查询中:
SELECT
DU.MESSAGEINSERTDATE
from [MYSMSREPORT].[DBO].[SIXDAYSHISTORY]
where
(CONVERT(NVARCHAR, CONVERT(DATETIME, MESSAGEINSERTDATE, 104), 112)
BETWEEN
CONVERT(NVARCHAR, CONVERT(DATETIME, 01/08/2008, 104), 112)
AND CONVERT(NVARCHAR,CONVERT(DATETIME,31/09/2012,104),112))
我有这个错误:
将表达式转换为数据类型datetime的算术溢出错误
有什么问题?
答案 0 :(得分:2)
9月31日不是日期,因此SQL无法将其转换为一个日期。
另外,您应该以文化特定格式(yyyyMMdd)硬编码日期。 01/08/2012
可能会在您的服务器上转换为8月1日,但在另一个服务器上运行,可能是1月8日。 20120801将在所有机器上转换为8月1日。
另外为什么要将日期转换为NVARCHAR
?您正在删除您拥有的任何索引,并执行不必要的隐式和显式转换。假设MESSAGEINSERTDATE
是DATETIME列,您可以使用
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'
如果您需要从MESSAGEINSERTDATE
使用
CAST(MESSAGEINSERTDATE AS DATE)