我有以下查询,它会列出1970年到当天之间的所有用户约会,但我收到错误,即datetime已经溢出。我尝试了一切,但我仍然不知道如何解决这个问题。
select dodate,
header,
starttime,
stoptime,
userid,
custid,
objid,
infoid,
aname
from appointment
where dodate > 2440587
and DATEADD(d,dodate - 2440587,'1970-01-01') >= CONVERT(date,GETDATE())
and done=0
and del=0
and userid='ak'
答案 0 :(得分:3)
2440587在SQLSever中是8582-02-06,它导致DATEADD转到公元前8395,并且sql server不支持它。
由于2440587是UNIX时间戳,因此它应该是1970-01-01之后的几秒钟 所以你应该简单地在0改变2440587
select dodate, header, starttime,stoptime,userid,custid,objid,infoid,aname
from appointment
where
(dodate > 0)
AND DATEADD(SECOND, dodate, '1970-01-01') <= GETDATE()
and done=0 and del=0 and userid='ak'
答案 1 :(得分:0)
也许这会对你有帮助......
SQL Server中不允许使用早于1753年1月1日的日期时间数据类型的值。 SQL Server拒绝所有不在1753到9999范围内的值。
另一个SQL Server数据类型smalldatetime存储日期和时间,其精度低于datetime数据类型。此数据类型的有效日期范围是从1900年1月1日到2079年6月6日。
问候,
秒。
答案 2 :(得分:0)
select dodate, header, starttime,stoptime,userid,custid,objid,infoid,aname
from appointment
where dodate > convert(date, '01/01/1970', 103)
AND dodate < convert(date, getdate(), 103) and done=0 and del=0 and userid='ak'