我有一个SQL数据库,似乎已经损坏了。以下错误信息
执行批处理时发生错误。错误消息是: SqlDateTime溢出。必须在1/1/1753 12:00上午12:00至12/31/9999 11:59:59下午
我运行了下面的脚本,现在当我在表中得到结果时,我搜索那些记录,它们不在那里,但他们却找到了它们?
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|Created|CreateByUserId|FinalisationDateTime|FinalisationByUserId|ConfigAccountId 10067\x{e76f}\x{e76f}11:22:32.010\x{e76f}2013年-04-23 11:22:32.010\x{##**$}2013年-04-23 11:23:07.577\x{##**$$}##*
发布于 2014-08-13 13:34:54
正如@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以返回有效日期。
https://stackoverflow.com/questions/25287213
复制相似问题