常見的用法為計算起迄日之間差了幾天(月/年),或是增加天數
情境和用法
DATEADD
當月的第一天、最後一天的日期
--當月第一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) ,0)
--當月最後一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE()), -1)
--當季,使用QUARTER(1月、4月、7月、10月)
SELECT DATEADD(QUARTER, DATEDIFF(QUARTER, 0, GETDATE()), 0)
SELECT DATEADD(QUARTER, DATEDIFF(QUARTER, -1, GETDATE()), -1)
--當天+時間 00:00:00.000
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
DATEPART
星期幾
因為 DATEPART return value 取決於 SET DATEFIRST 所設定的值,預設為星期日,可以透過 @@DATEFIRST
得知目前設定的值
--default 為 7 (星期日)
SELECT @@DATEFIRST
若預設為星期日,則星期日為 1, 星期一為 2……星期六為 7。
SELECT DATEPART(WEEKDAY, '19000101') --2
SELECT DATEPART(WEEKDAY, '19000102') --3
DATEDIFF
找出周末
data types 中可以看見日期時間是有範圍限制的,恰巧1900-01-01和1753-01-01都是星期一
因此可以利用這兩個日期來除以7取得餘數,計算出星期幾,再除以5判斷是否為周末
SELECT DATEDIFF(DAY, '19000101', '2015-01-05') % 7 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-06') % 7 -- 1
SELECT DATEDIFF(DAY, '19000101', '2015-01-07') % 7 -- 2
SELECT DATEDIFF(DAY, '19000101', '2015-01-08') % 7 -- 3
SELECT DATEDIFF(DAY, '19000101', '2015-01-09') % 7 -- 4
SELECT DATEDIFF(DAY, '19000101', '2015-01-10') % 7 -- 5
SELECT DATEDIFF(DAY, '19000101', '2015-01-11') % 7 -- 6
SELECT DATEDIFF(DAY, '19000101', '2015-01-05') % 7 / 5 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-06') % 7 / 5 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-07') % 7 / 5 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-08') % 7 / 5 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-09') % 7 / 5 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-10') % 7 / 5 -- 1
SELECT DATEDIFF(DAY, '19000101', '2015-01-11') % 7 / 5 -- 1