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来否定月份。但相反,它是通过日差实现的。
答案 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。