Sql Server管理日期时间溢出d,-10000,获取日期时间错误



嘿,我不知道我问了几个和我使用相同程序的朋友,但他们不能帮我解决这个问题。

我试着在hp proliant d380 Gen6上运行我的服务器,我得到了iLo(idk,如果这会导致问题或任何事情(

它的副本在Gen2上工作fin没有iLo所以不能说太多无论如何:

select dbo.ents.containerId
From dbo.Ents
Where LastActive > DATEADD(d, -100000, GETDATE ());

我的错误:

SQLERROR:517 22007[Microsoft][SQL Server Native Client 11.0][SQL服务器]向"datetime"列添加值导致溢出

不确定原因我测试了重新安装程序,甚至是它的其他版本,如果我对计算机上的日期/时间做了其他事情,我也重新安装了Ws2016(我的想法(

所以现在我在这里寻求帮助。我在这里看到了一些话题但是除了添加数据库(编辑数据库文件中的基本内容(,当我添加SQL文件或编辑数据库中的某些内容时运行查询之外,我对这个程序了解不多

Getdate((返回日期时间数据类型。将您的值添加到其中会引发错误,因为结果超出了数据类型的域。正如其他人所指出的,这种逻辑是可疑的,但只有你知道使用这种奇怪增量的原因。当我在做的时候:
DATEADD(d, -100000, GETDATE ())

键入";d";而不是";天";?哪个更可读?懒惰会导致不良习惯和难以阅读/理解的代码。

要修复这个特定的错误(但可能会添加另一个小问题(,可以使用sysdatetime((:

with cte (LastActive) as (select cast('20000102' as datetime) )
select * from cte 
where LastActive > DATEADD(day, -100000, sysdatetime());
select DATEADD(day, -100000, sysdatetime());

Sysdatetime((返回datetime2,它比datetime更准确,并且具有更大的域(从0001-01-01开始(。您的datetime列将隐式地";上转换的";到datetime2,因为比较的数据类型优先级。我将让您来弄清楚当您比较这两种不同的数据类型时会发生什么,以及额外精度的影响。这可能与你的处境无关,但这是需要承认的。

相关内容

最新更新