0

在以下查询中:

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))

我有这个错误:

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

问题是什么?

4

1 回答 1

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)
于 2012-09-26T10:16:54.173 回答