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:
OrderId | ProductName | OrderDate |
---|---|---|
1 | 'Bike' | 2018-10-22 16:25:46.635 |
對 OrderDate 往後加兩天:
SELECT OrderId,
DATEADD(day, 2, OrderDate) AS OrderDate2
FROM Orders
會得到例如:
OrderId | OrderDate2 |
---|---|
1 | 2018-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