Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-datetime溢出。列出从1970年到今天的所有约会_Sql_Sql Server - Fatal编程技术网

SQL-datetime溢出。列出从1970年到今天的所有约会

SQL-datetime溢出。列出从1970年到今天的所有约会,sql,sql-server,Sql,Sql Server,我有下面的查询,它将列出1970年和当前日期之间的所有用户约会,但我得到的错误是datetime导致溢出。我什么都试过了,但我仍然不知道如何解决这个问题 select dodate, header, starttime, stoptime, userid, custid, objid, infoid, aname from appointment where

我有下面的查询,它将列出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'

也许这会帮助你

SQL Server中不允许日期时间数据类型的值早于1753年1月1日。SQL Server拒绝所有不在1753到9999范围内的值

另一种SQL Server数据类型smalldatetime存储日期和时间的精度低于datetime数据类型。此数据类型的有效日期范围为1900年1月1日至2079年6月6日

您好


S..

也许这会帮助你

SQL Server中不允许日期时间数据类型的值早于1753年1月1日。SQL Server拒绝所有不在1753到9999范围内的值

另一种SQL Server数据类型smalldatetime存储日期和时间的精度低于datetime数据类型。此数据类型的有效日期范围为1900年1月1日至2079年6月6日

您好


SQLSever中的S..

2440587是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'
选择dodate、header、starttime、stoptime、userid、custid、objid、infoid、aname
预约
哪里
(十二烷酸盐>0)

而DATEADD(第二个,dodate,'1970-01-01')2440587在SQLServer中是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'
选择dodate、header、starttime、stoptime、userid、custid、objid、infoid、aname
预约
哪里
(十二烷酸盐>0)
和DATEADD(第二个,dodate,'1970-01-01')
选择dodate、header、starttime、stoptime、userid、custid、objid、infoid、aname
预约
其中dodate>转换(日期'01/01/1970',103)
和dodate
选择dodate、header、starttime、stoptime、userid、custid、objid、infoid、aname
预约
其中dodate>转换(日期'01/01/1970',103)
和dodate
2440587
你的陈述是什么?它是一个01.01.1970为什么你必须将1970年1月1日转换为2440587?那么,
dodate
是一个儒略日吗?你为什么要以这种形式存储数据,与其在insert/update期间将其预先转换为SQL Server的本机数据类型,不如@DavidJackowiak认为UNIX时间信息在这个问题上会非常有用。您的语句的
2440587
部分是什么?它是一个01.01.1970为什么必须将01.01.1970转换为2440587?那么,
dodate
是朱利安节吗?你为什么要以这种形式存储数据,与其在insert/update期间将其预转换为SQL Server的本机
datetime
数据类型,不如@DavidJackowiak说UNIX时间信息在这个问题上会非常有用。我可以知道与这个问题相关的内容吗?当你超出这些范围时,你会得到datetime溢出异常。我可以知道与此问题相关的内容吗问题?当您超出这些范围时,就会出现datetime溢出异常。如果该字段存储为int(如您在评论中所说),他可以定义
2440587='19700101'
,那么
dateadd
@Alex不会有任何问题。您是对的,这取决于日期在dodate中的存储方式。我认为这是日期的int值,也就是1900-01-01的天数。如果该字段存储为int(如您在评论中所说),他可以定义
2440587='19700101'
,那么
dateadd
@Alex不会有任何问题。您是对的,这取决于日期在dodate中的存储方式。我认为这是从1900-01-01的日期转换为int,也就是从1900-01-01的天数。虽然这个代码片段可以解决这个问题,但它没有解释为什么或者如何回答这个问题。请,因为这确实有助于提高你的文章质量。标记者/审阅者:虽然这个代码片段可以解决这个问题,但它没有解释为什么或者如何回答这个问题。请,因为这确实有助于提高你的文章质量。标记者/审阅者: