SQL Server 無單一 DATE_FORMAT() 函數,需組合 CONVERT、FORMAT (2012+)、DATEPART 等達到格式化目的。
CONVERT(VARCHAR, GETDATE(), style)
| Style | 輸出範例 | 說明 |
|---|---|---|
| 100 | Mon DD YYYY HH:MIAM | 預設含毫秒 |
| 101 | MM/DD/YYYY | 美式日期 |
| 102 | YYYY.MM.DD | 點分隔 |
| 103 | DD/MM/YYYY | 英式日期 |
| 104 | DD.MM.YYYY | 德式日期 |
| 105 | DD-MM-YYYY | 義式日期 |
| 106 | DD Mon YYYY | 月份縮寫 |
| 107 | Mon DD, YYYY | |
| 108 | HH:MI:SS | 純時間 |
| 110 | MM-DD-YYYY | |
| 111 | YYYY/MM/DD | |
| 112 | YYYYMMDD | 無分隔,適合排序/分組 |
| 113 | DD Mon YYYY HH:MI:SS:MMM | 歐洲預設+毫秒 |
| 120 | YYYY-MM-DD HH:MI:SS | ISO 8601 (24h) |
| 121 | YYYY-MM-DD HH:MI:SS.MMM | ISO + 毫秒 |
| 126 | YYYY-MM-DDTHH:MI:SS.MMM | ISO 8601 T 分隔 |
| 127 | YYYY-MM-DDTHH:MI:SS.MMMZ | 含時區 Z |
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss', 'zh-TW'); -- 2024-05-15 14:30:05
SELECT FORMAT(GETDATE(), 'yyyy年MM月dd日 dddd', 'zh-TW'); -- 2024年05月15日 星期三
支援自訂格式、文化特性,但效能較 CONVERT 低,適合報表輸出非高頻查詢。
SELECT
DATEPART(year, GETDATE()) AS yr,
DATEPART(month, GETDATE()) AS mo,
DATEPART(day, GETDATE()) AS dy,
DATENAME(weekday, GETDATE()) AS wk;
-- 組合字串
SELECT CAST(DATEPART(year, GETDATE()) AS VARCHAR(4)) + '-' +
RIGHT('0'+CAST(DATEPART(month, GETDATE()) AS VARCHAR(2)),2) + '-' +
RIGHT('0'+CAST(DATEPART(day, GETDATE()) AS VARCHAR(2)),2);
CONVERT(CHAR(8), dt, 112) → 20240515DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) / DATEADD(day, -1, DATEADD(month, DATEDIFF(month, 0, GETDATE())+1, 0))CAST(GETDATE() AS DATE) (2008+) 或 DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)DATEPART(week, dt)、DATEPART(quarter, dt)CONVERT 或直接比較 DATETIME 值,避免函數包裹導致 SARGable 失效。FORMAT 簡化程式碼。