SQL Server DATEADD() 增加或減少指定的時間間隔

在 SQL Server 中,我們可以用 DATEADD() 函數在日期和時間中增加或減少指定的時間間隔。

DATEADD() 語法 (Syntax)

DATEADD(datepart, number, date)

DATEADD() 會將指定的 number 值 (一個正負號的整數) 加到 date 值的指定 datepart,然後返回修改後的值。

其中 datepart 可以是這些值:

datepart (全名和縮寫)說明
year, yyyy, yy
month, mm, m
day, dd, d
hour, hh
minute, n
second, ss, s
millisecond, ms毫秒
microsecond, mcs微秒
nanosecond, ns毫微秒
quarter, qq, q
dayofyear, dy, y一年中的第幾天
week, wk, ww
weekday, dw星期幾

DATEADD() 用法 (Example)

假設有一個 Orders table:

OrderIdProductNameOrderDate
1'Bike'2018-10-22 16:25:46.635

對 OrderDate 往後加兩天:

SELECT OrderId,
DATEADD(day, 2, OrderDate) AS OrderDate2
FROM Orders

會得到例如:

OrderIdOrderDate2
12018-10-24 16:25:46.635

舉另外一個例子,這個 SQL:

DECLARE @datetime2 datetime2 = '2007-01-01 13:10:10.1111111';

SELECT 'year', DATEADD(year, 1, @datetime2)  
UNION ALL  
SELECT 'quarter', DATEADD(quarter, 1, @datetime2)  
UNION ALL  
SELECT 'month', DATEADD(month, 1, @datetime2)  
UNION ALL  
SELECT 'dayofyear', DATEADD(dayofyear, 1, @datetime2)  
UNION ALL  
SELECT 'day', DATEADD(day, 1, @datetime2)  
UNION ALL  
SELECT 'week', DATEADD(week, 1, @datetime2)  
UNION ALL  
SELECT 'weekday', DATEADD(weekday, 1, @datetime2)  
UNION ALL  
SELECT 'hour', DATEADD(hour, 1, @datetime2)  
UNION ALL  
SELECT 'minute', DATEADD(minute, 1, @datetime2)  
UNION ALL  
SELECT 'second', DATEADD(second, 1, @datetime2)  
UNION ALL  
SELECT 'millisecond', DATEADD(millisecond, 1, @datetime2)  
UNION ALL  
SELECT 'microsecond', DATEADD(microsecond, 1, @datetime2)  
UNION ALL  
SELECT 'nanosecond', DATEADD(nanosecond, 1, @datetime2);  

會得到以下結果:

Year         2008-01-01 13:10:10.1111111  
quarter      2007-04-01 13:10:10.1111111  
month        2007-02-01 13:10:10.1111111  
dayofyear    2007-01-02 13:10:10.1111111  
day          2007-01-02 13:10:10.1111111  
week         2007-01-08 13:10:10.1111111  
weekday      2007-01-02 13:10:10.1111111  
hour         2007-01-01 14:10:10.1111111  
minute       2007-01-01 13:11:10.1111111  
second       2007-01-01 13:10:11.1111111  
millisecond  2007-01-01 13:10:10.1121111  
microsecond  2007-01-01 13:10:10.1111121  
nanosecond   2007-01-01 13:10:10.1111111 

更多 SQL Server 相關的日期時間函數在這邊
更多 MySQL 相關的日期時間函數在這邊