DATEADD 是 SQL Server 進行日期加減運算的核心函數。本文說明語法、interval 參數完整對照、三種常用呼叫方式(預存程序、簡單查詢、動態 SQL)、以及 pubs 範例資料庫實測。
DATEADD(interval, number, date)
| 參數 | 說明 |
|---|---|
| interval | 時間間隔單位(必填) |
| number | 加減數量,正數=未來,負數=過去 |
| date | 基準日期 |
| interval | 縮寫 | 說明 |
|---|---|---|
| year | yy, yyyy | 年 |
| quarter | qq, q | 季 |
| month | mm, m | 月 |
| dayofyear | dy, y | 年度天數 |
| day | dd, d | 日 |
| week | wk, ww | 週 |
| weekday | dw | 平日 |
| hour | hh | 時 |
| minute | mi, n | 分 |
| second | ss, s | 秒 |
| millisecond | ms | 毫秒 |
| microsecond | mcs | 微秒 |
| nanosecond | ns | 奈秒 |
SET NOCOUNT ON
DECLARE @kp TABLE (id INT, ys INT, syrq DATETIME)
INSERT @kp SELECT 1, 2, '2008-08-08' UNION ALL
SELECT 2, 3, '2008-09-01' UNION ALL
SELECT 3, 33, '2008-08-11'
SELECT id, DATEADD(month, ys, syrq) AS 新日期 FROM @kp
SELECT DATEADD(month, CAST(ys AS INT), syrq) AS 新日期 FROM kp
DECLARE @sqlstr NVARCHAR(MAX)
SET @sqlstr = 'SELECT * FROM 表 WHERE 時間字段 = DATEADD(day, 5, ''2008-08-08'')'
EXEC sp_executesql @sqlstr
USE pubs
GO
SELECT DATEADD(day, 21, pubdate) AS timeframe FROM titles
GO
number 超出 INT 範圍會溢位date 為字串時,隱含轉換可能受語言/日期格式設定影響,**建議永遠 CAST 為 DATETIME**weekday (dw) 與 week (wk) 行為不同:前者加平日,後者加 7 天Access 同樣支援 DateAdd,語法相同:DateAdd(interval, number, date),interval 字串同上。