SQL Server 在T-SQL中,当在DATEDIFF方法中作为日期传入时,-1表示什么?

d6kp6zgx  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(162)

我正在尝试理解下面的T-SQL代码:

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

传入DATEDIFF时-1表示什么?根据this,它应该是一个日期参数。

u5rb5r59

u5rb5r591#

在这里,DATEDIFF的第二个参数x1m0 n1 a和DATEADD的第三个参数x1m0 n1 a将隐式转换为datetime。您可以使用一个简单的表达式找到该值:

SELECT CONVERT(datetime, -1);

这表示1899-12-31 00:00:00.000。对于“旧”日期和时间数据类型((small)datetime),它们允许从数值数据类型(如intdecimal)进行转换。0表示1900-01-01 00:00:00,每个全整数值表示一天。因此-1表示1899-12-31 00:00:00.000,2表示1900-01-03 00:00:00.000,5.5表示1900-01-06 12:00:00.000(因为.5表示12小时)。
对于 new 日期和时间数据类型,不存在此转换。
事实上,上面的内容可能更容易写成下面的形式:

SELECT EOMONTH(GETDATE(),-1);

这里,-1表示第一个参数日期前1个月的月末EOMONTH的第二个参数是可选的,因此EOMONTH(GETDATE())将返回当前月份的最后一天,而EOMONTH(GETDATE(),2)将返回2个月时间(撰写时为2023年3月31日)内的最后一天。

相关问题