SQL Server 日期時間處理核心函數與 CONVERT 格式代碼完整對照,涵蓋取得、運算、擷取、格式化、間隔參數表。
| 函數 | 用途 | 範例 |
|---|---|---|
GETDATE() | 目前系統日期時間 | 2023-10-15 14:30:00.123 |
DATEADD(interval, n, date) | 日期加減 | DATEADD(DAY, 2, '2023-10-15') → 2023-10-17 |
DATEDIFF(interval, d1, d2) | 日期差值 (d2-d1) | DATEDIFF(DAY, '2023-10-01', '2023-10-18') → 17 |
DATEPART(interval, date) | 擷取整數部份 | DATEPART(MONTH, '2023-10-15') → 10 |
DATENAME(interval, date) | 擷取字串名稱 | DATENAME(WEEKDAY, '2023-10-15') → Sunday |
DAY()/MONTH()/YEAR() | 單一成分捷徑 | MONTH(GETDATE()) → 10 |
| 代碼 | 輸出範例 | 說明 |
|---|---|---|
| 120 | 2023-10-15 14:30:00 | ODBC 標準 yyyy-mm-dd hh:mi:ss |
| 111 | 2023/10/15 | yyyy/mm/dd |
| 112 | 20231015 | yyyymmdd |
| 102 | 2023.10.15 | yyyy.mm.dd |
| 101 | 10/15/2023 | mm/dd/yyyy (美式) |
| 103 | 15/10/2023 | dd/mm/yyyy (歐式) |
| 104 | 15.10.2023 | dd.mm.yyyy |
| 105 | 15-10-2023 | dd-mm-yyyy |
| 106 | 15 10 2023 | dd mon yyyy |
| 107 | Oct 15, 2023 | Mon dd, yyyy |
| 108 | 14:30:00 | hh:mi:ss |
| 114 | 14:30:00.123 | hh:mi:ss.mmm |
去分隔符技巧:REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ', ''), ':', '') → 20231015143000
| 間隔 | 縮寫 | 說明 | 範圍 |
|---|---|---|---|
| Year | YY, YYYY | 年 | 1753-9999 |
| Quarter | QQ, Q | 季 | 1-4 |
| Month | MM, M | 月 | 1-12 |
| DayOfYear | DY, Y | 年度第幾天 | 1-366 |
| Day | DD, D | 日 | 1-31 |
| Weekday | DW, W | 週幾 | 1-7 (週日=1) |
| Week | WK, WW | 年度第幾週 | 0-51 |
| Hour | HH | 時 | 0-23 |
| Minute | MI, N | 分 | 0-59 |
| Second | SS, S | 秒 | 0-59 |
| Millisecond | MS | 毫秒 | 0-999 |
-- 本月第一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0);
-- 本月最後一天 23:59:59.997
SELECT DATEADD(MS, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())+1, 0));
-- 本周週一
SELECT DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0);
-- 本年第一天
SELECT DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0);
-- 當天午夜
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0);
SET DATEFIRST 7 (美式,週日=1) / SET DATEFIRST 1 (歐式,週一=1)。查詢目前設定:SELECT @@DATEFIRST。跨環境部署時建議在腳本開頭明確設定。