取得當月、年的第一天和最後一天
1
2
3
4
5
6
7
8
9
10
-- 當月第一天
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)
-- 當天零時2018-10-15 00:00:00.000
select dateadd(day, datediff(day, 0, getdate()), 0)
範例
1
2
3
4
5
6
7
8
9
declare @year int=2022
declare @month int=4
declare @begindate datetime= convert(varchar(30),cast(@year as varchar)+'-'+(case when @month < 10 then '0'+cast(@month as varchar) else cast(@month as varchar ) end) + '-' +'01',120)
declare @enddate datetime=dateadd(month, datediff(month, -1, @begindate), -1)
print @begindate
print @enddate
-- 04 1 2022 12:00AM
-- 04 30 2022 12:00AM
函數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”上來獲得特殊的日期,這個技巧可以用來計算很多不同的日期。