-- 當月第一天
select dateadd(month, datediff(month, 0, getdate()), 0)
-- 當月最后一天(思路:下月的第一天減去一天)
select dateadd(month, datediff(month, 0, dateadd(month, 1, getdate())), -1)
-- 當年第一天
select dateadd(year, datediff(year, 0, getdate()), 0)
-- 當年最后一天(思路:下年的第一天減去一天)
select dateadd(year, datediff(year, 0, dateadd(year, 1, getdate())), -1)
--------------------------------------------------------------------------------------------------
函數datediff(month, 0, getdate())是計算當前日期和“1900-01-01 00:00:00.000”這個日期之間的月數。
記住:日期和時間變量和毫秒一樣是從“1900-01-01 00:00:00.000”開始計算的。這就是為什么你可以在DATEDIFF函數中指定第一個時間表達式為“0”。
下一個函數是DATEADD,增加當前日期到“1900-01-01”的月數。通過增加預定義的日期“1900-01-01”和當前日期的月數,我們可以獲得這個月的第一天。另外,計算出來的日期的時間部分將會是“00:00:00.000”。
這個計算的技巧是先計算當前日期到“1900-01-01”的時間間隔數,然后把它加到“1900-01-01”上來獲得特殊的日期,這個技巧可以用來計算很多不同的日期。
