在以下查询中:
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))
我有这个错误:
将表达式转换为数据类型日期时间的算术溢出错误
问题出在哪里?
9 月 31 日不是日期,因此 SQL 无法将其转换为日期。
另外,您应该以区域性非特定格式 (yyyyMMdd) 对日期进行硬编码。 01/08/2012
可能会在您的服务器上转换为 8 月 1 日,但在另一台服务器上运行,可能是 1 月 8 日。20120801将在所有计算机上转换为 8 月 1 日。
此外,为什么要将日期转换为NVARCHAR
?您正在删除您拥有的任何索引,并执行不必要的隐式和显式转换。假设MESSAGEINSERTDATE
是一个日期时间列,你可以使用
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'
如果您需要从MESSAGEINSERTDATE
使用中删除时间
CAST(MESSAGEINSERTDATE AS DATE)