gpt4 book ai didi

sql-server - SQL 中 DATEADD() 的真实返回类型是什么?

转载 作者:行者123 更新时间:2023-12-01 00:16:53 24 4
gpt4 key购买 nike

SQL 中 DATEADD()真实 返回类型是什么?微软的文档here说这是一个 date,他们的文档 here表示它是一个 datetime,而 Management Studio 中的 Intellisense 表示它是一个 smalldatetime

它们之间有相当大的区别,我很惊讶微软在这方面自相矛盾。 date 不保存时间信息,smalldatetime 保存的时间信息特别不准确;在这两种情况中的任何一种情况下,您都不妨忘记一些事情,例如尝试跟踪已经过去的毫秒数。

我确实尝试了以下实验:

select getdate(), DATEADD(ms, 150, getdate())

可靠地产生如下结果:

2015-01-09 09:54:56.157,    2015-01-09 09:54:56.307

这让我相信这三个记录的案例都不是真的,但它实际上返回了一个 datetime2 值。顺便说一句,这是在 SQL Server 2012 中。

所以我只是想确认一下:

  1. 它真的是一个datetime2,还是一个datetime

  2. 这是否在不同的、相对现代的 SQL Server 版本(例如,自 2005 年以来)之间非常一致?

  3. 这里还有什么我不太清楚的故事吗,或者我什至被什么东西抛弃了?

所以本质上这仍然是一个问题,“真正的返回类型是什么?”但以上三点说明了我在这方面的立场。

编辑

请注意:在第一个链接上,我主要阅读页面顶部的内容,当我看到上面写着 date 而另一个链接写着 datetime 时,我觉得我无法认真对待这些页面以寻找任何其他陈述。 Aaron Bertrand 澄清了那些文档中使用的 datedate 之间的不同格式,尽管 Microsoft 可能在对非常非技术性的术语使用斜体时犯了一个错误。

最佳答案

From MSDN

The return data type is the data type of the date argument, except for string literals. The return data type for a string literal is datetime. An error will be raised if the string literal seconds scale is more than three positions (.nnn) or contains the time zone offset part.

因此,如果第 3 个参数是 DATE 类型之一,它将返回该类型的结果,例如

select CURRENT_TIMESTAMP, DATEADD(ms, 150, CAST(CURRENT_TIMESTAMP AS DATETIME))
select CURRENT_TIMESTAMP, DATEADD(ms, 150, CAST(CURRENT_TIMESTAMP AS DATETIME2))
select CURRENT_TIMESTAMP, DATEADD(ms, 150, CAST(CURRENT_TIMESTAMP AS SMALLDATETIME))

分别返回 3 种不同的类型,即 DateTime、DateTime2 和 SmallDateTime

关于sql-server - SQL 中 DATEADD() 的真实返回类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27864472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com