将表达式转换为数据类型日期时间时出现算术溢出错误



在以下查询中:

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)

最新更新