首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlDateTime溢出误差

SqlDateTime溢出误差
EN

Stack Overflow用户
提问于 2014-08-13 13:13:00
回答 1查看 5.1K关注 0票数 1

我有一个SQL数据库,似乎已经损坏了。以下错误信息

执行批处理时发生错误。错误消息是: SqlDateTime溢出。必须在1/1/1753 12:00上午12:00至12/31/9999 11:59:59下午

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

代码语言:javascript
复制
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{##**$$}##*

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-13 13:34:54

正如@DMason在评论中所说的,您的比较操作符是错误的。

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

代码语言:javascript
复制
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中的所有请求,请执行以下操作:

代码语言:javascript
复制
SELECT RequestDateTime 
FROM dbo.PickingSlip 
WHERE RequestDateTime >= '2013-01-01' 
   OR RequestDateTime <= '2013-12-31'

也可以使用中间语法:

代码语言:javascript
复制
SELECT RequestDateTime 
FROM dbo.PickingSlip 
WHERE RequestDateTime BETWEEN '2014-01-01' AND '2014-12-31'

有效日期

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

代码语言:javascript
复制
SELECT ID, RequestDateTime
FROM PickingSlip
WHERE ISDATE(RequestDateTime) = 0

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25287213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档