gpt4 book ai didi

sql-server - 以整数值作为日期参数的 T-SQL 日期函数

转载 作者:行者123 更新时间:2023-12-02 16:57:54 24 4
gpt4 key购买 nike

我试图修改遗留查询并遇到这个代码块

select   DATEADD(MONTH, DATEDIFF(MONTH, -1,getdate() )-1, 1)

但我认为 dateadd 和 datediff 函数需要一些日期参数来进行计算。但是这里的 DateDiff 和 DateAdd 在 Date 参数的位置有一些整数值

例如 DATEDIFF(MONTH, -1,getdate() )-1 返回 1431 这只是一个十进制值,但根据文档的代码块查找 Date 参数。

https://www.w3schools.com/sql/func_sqlserver_datediff.asp

对于 DateAdd 也是如此

有人请分享一些解释

最佳答案

不幸的是,DATEADDDATEDIFF 被指定用于 datetime(以及任何更新的日期时间数据类型)。因此,他们继承了旧类型的许多肮脏之处,包括implicit conversions。从 intdatetime 是允许的1

0 转换为 1900-01-01-1 转换为 1899-12-311 转换为 1900-01-02。简而言之,将整数转换为 1900-01-01 之后的“那么多”天。

但是让我们看看您的代码。它计算 1899-12-31 差值,然后减去一个,将相同的月数加到 1900-01-02。这样做的最终效果是为您提供当前月份的第 2 个。

即使保持相同的结构,也有更简单的方法来编写:

select DATEADD(MONTH, DATEDIFF(MONTH, 0, getdate() ), 1)

或使用 DATEFROMPARTS ,这是首选,因为它使您正在做的事情变得明确/明显并且使用更现代的数据类型(date)。


1您甚至不允许显式intdatetime2 的转换。因为,真的,这没有意义。

关于sql-server - 以整数值作为日期参数的 T-SQL 日期函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55627295/

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