SQL - 日期时间溢出。列出1970年至当天的所有约会

时间:2016-11-04 08:35:40

标签: sql sql-server

我有以下查询,它会列出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'

3 个答案:

答案 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'