SQL Server CONVERT 函數透過 style 參數支援多種日期時間輸出格式。本文整理官方支援的所有樣式代碼(0-131),附帶輸出範例與適用場景,方便開發者快速查閱並選擇所需格式。
CONVERT(data_type(length), expression, style)
data_type:目標型別,日期格式化常用 varchar、nvarcharexpression:日期時間運算式(如 GETDATE()、欄位名)style:格式代碼,決定輸出樣式| Style | 輸出範例 | 說明 / 標準 |
|---|---|---|
| 0 / 100 | May 16 2006 10:57AM | 預設 mon dd yyyy hh:miAM/PM |
| 1 | 05/16/06 | 美式 mm/dd/yy |
| 2 | 06.05.16 | yy.mm.dd |
| 3 | 16/05/06 | 英式 dd/mm/yy |
| 4 | 16.05.06 | dd.mm.yy |
| 5 | 16-05-06 | dd-mm-yy |
| 6 | 16 05 06 | dd mm yy |
| 7 | May 16, 06 | Mon dd, yy |
| 8 | 10:57:46 | hh:mi:ss |
| 9 / 109 | May 16 2006 10:57:46:827AM | 含毫秒 mon dd yyyy hh:mi:ss:mmmAM/PM |
| 10 | 05-16-06 | mm-dd-yy |
| 11 | 06/05/16 | yy/mm/dd |
| 12 | 060516 | yymmdd |
| 13 / 113 | 16 May 2006 10:57:46:937 | 歐洲預設 dd mon yyyy hh:mi:ss:mmm (24h) |
| 14 / 114 | 10:57:46:967 | hh:mi:ss:mmm (24h) |
| 20 / 120 | 2006-05-16 10:57:47 | ODBC 標準 yyyy-mm-dd hh:mi:ss (24h) |
| 21 / 121 | 2006-05-16 10:57:47.157 | ODBC 含毫秒 yyyy-mm-dd hh:mi:ss.mmm |
| 22 | 05/16/06 10:57:47 AM | 美式含時間 mm/dd/yy hh:mi:ss AM/PM |
| 23 | 2006-05-16 | ISO 8601 日期 yyyy-mm-dd |
| 24 | 10:57:47 | ISO 8601 時間 hh:mi:ss |
| 25 | 2006-05-16 10:57:47.250 | yyyy-mm-dd hh:mi:ss.mmm |
| 101 | 05/16/2006 | 美式四位年 mm/dd/yyyy |
| 102 | 2006.05.16 | yyyy.mm.dd |
| 103 | 16/05/2006 | 英式四位年 dd/mm/yyyy |
| 104 | 16.05.2006 | dd.mm.yyyy |
| 105 | 16-05-2006 | dd-mm-yyyy |
| 106 | 16 May 2006 | dd mon yyyy |
| 107 | May 16, 2006 | Mon dd, yyyy |
| 108 | 10:57:49 | hh:mi:ss |
| 110 | 05-16-2006 | mm-dd-yyyy |
| 111 | 2006/05/16 | yyyy/mm/dd |
| 112 | 20060516 | ISO 8601 緊湊 yyyymmdd |
| 126 | 2006-05-16T10:57:49.827 | ISO 8601 完整含 T 分隔符 |
| 130 | 18 ???? ?????? 1427 10:57:49:907AM | 伊斯蘭曆 (Hijri) kuwaiti 演算法 |
| 131 | 18/04/1427 10:57:49:920AM | 伊斯蘭曆 dd/mm/yyyy hh:mi:ss:mmmAM |
| 需求 | 建議 Style | 範例語法 |
|---|---|---|
| 標準日期排序/儲存 | 23 / 112 | CONVERT(varchar(10), GETDATE(), 23) → 2006-05-16 |
| 完整日期時間(可排序) | 120 / 121 | CONVERT(varchar(19), GETDATE(), 120) → 2006-05-16 10:57:47 |
| API/JSON 傳輸 (ISO 8601) | 126 / 127 | CONVERT(varchar(27), GETDATE(), 126) → 2006-05-16T10:57:49.827 |
| 中文報表顯示 | 111 / 105 | CONVERT(varchar(10), GETDATE(), 111) → 2006/05/16 |
| 僅時間部分 | 8 / 108 / 24 | CONVERT(varchar(8), GETDATE(), 108) → 10:57:49 |
| 檔名/資料夾命名(無特殊字元) | 112 | CONVERT(varchar(8), GETDATE(), 112) → 20060516 |
-- 舊版 CONVERT 組合
SELECT CONVERT(varchar(10), GETDATE(), 120) + ' ' + CONVERT(varchar(8), GETDATE(), 108);
-- 新版 FORMAT 更直觀
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss', 'zh-TW');
錯誤: WHERE CONVERT(varchar(10), OrderDate, 120) = '2024-01-15'(導致索引失效)
正確: WHERE OrderDate >= '2024-01-15' AND OrderDate < '2024-01-16'
120/121 為 ODBC 標準,跨語言解析最安全126/127 為 XML/JSON 標準格式收藏此對照表,下次需要特定日期格式時即可秒級找到正確 style 代碼,避免試誤浪費時間。