SqlDateTime溢出错误

时间:2014-08-13 13:13:01

标签: sql sql-server sql-server-2008

我有一个SQL数据库,似乎已损坏。

下面的错误信息
  

执行批处理时发生错误。错误信息是:SqlDateTime溢出。必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。

我运行了下面的脚本,现在当我在表格中得到结果并且我搜索那些他们不在那里的记录但是他们找到了吗?

SELECT RequestDateTime 
FROM dbo.PickingSlip 
WHERE RequestDateTime < '1/1/1753 12:00:00 AM' 
   OR RequestDateTime > '12/31/9999 11:59:59 PM'

这是表格中的一些数据。

  

ID | RequestedDataFileId | CurrentShelf | PickingSlipStatusId | ByUserId | ForUserId | RequestDateTime | RequestComments | IsPrinted | QueueIdentifier |创建| CreateByUserId | FinalisationDateTime | FinalisationByUserId | ConfigAccountId   10067 | 5356276 | 0007a | 43 | 8 | 6 | 2013-04-23 11:22:32.010 || 1 | NULL | 2013-04-23 11:22:32.010 | 8 | 2013-04-23 11:23: 07.577 | 8 | 5   10068 | 5356547 | 0005A | 43 | 8 | 6 | 2013-04-25 11:10:51.027 || 1 | NULL | 2013-04-25 11:10:51.027 | 8 | 2013-04-25 11:11: 20.497 | 8 | 5

1 个答案:

答案 0 :(得分:2)

正如@DMason在评论中所说,你的比较运算符是错误的。

因此,如果您尝试这样做,您应该得到结果:

SELECT RequestDateTime 
FROM dbo.PickingSlip 
WHERE RequestDateTime >= '1/1/1753 12:00:00 AM' 
   OR RequestDateTime <= '12/31/9999 11:59:59 PM'

在原始查询中,您说明RequestDateTime < '1/1/1753 12:00:00 AM',正在查找小于最短日期的日期。

同样,RequestDateTime > '12/31/9999 11:59:59 PM'正在寻找大于最大值的日期,这就是错误告诉你的。

如果您想过滤日期,可以将日期格式化为ISO格式(YYYY-MM-DD),因此要查找2013中的所有请求,您可以这样做:

SELECT RequestDateTime 
FROM dbo.PickingSlip 
WHERE RequestDateTime >= '2013-01-01' 
   OR RequestDateTime <= '2013-12-31'

或者你可以使用中间语法:

SELECT RequestDateTime 
FROM dbo.PickingSlip 
WHERE RequestDateTime BETWEEN '2014-01-01' AND '2014-12-31'

有效日期

要查看有效日期,您可以使用 ISDATE() 检查无效日期并返回行:

SELECT ID, RequestDateTime
FROM PickingSlip
WHERE ISDATE(RequestDateTime) = 0

只需将其更改为WHERE ISDATE(RequestDateTime) = 1即可返回有效日期。