sql server或Tsql - Datediff和Dateadd函数

时间:2014-09-14 16:29:40

标签: sql sql-server sql-server-2008

select datediff(mm, 0, getdate())

此函数将输出返回为1376.我不明白如何计算

select dateadd(mm, datediff(mm, 0, getdate()), -1)

此函数将输出返回为" 2014-08-31 00:00:00.000"这是8月31日。 我根据dateadd() - mm的理解代表月份。

select dateadd(mm, datediff(mm, 0, getdate()), -2)

输出为" 2014-08-30 00:00:00.000"。 这对我来说再次让人感到困惑,因为这应该以-1来否定月份。但相反,它是通过日差实现的。

1 个答案:

答案 0 :(得分:5)

mm是月份,但您应该使用" month"。然后很明显你在做什么。

声明:

select datediff(month, 0, getdate())

获取自date为0以来的月数.SQL Server将日期存储为自1900年1月1日以来的天数。因此,此基准日期过去为1,376个月(正如我写的那样)。

当你写:

select dateadd(month, datediff(month, 0, getdate()), -1)

然后您将自1900-01-01以来的月数添加到值为-1的日期。 -1被解释为datetime,对应于1899-12-31。因此,当您添加月份时,您将获得上个月的最后一天。当您将-1更改为-2时,您将获得倒数第二天,因为您的计算时间为1899-12-30。