核心函數
CONVERT(VARCHAR(100), GETDATE(), style)
-- style 決定輸出格式,以下為完整對照 (基準 2006-05-16 10:57:49.123)
完整 Style 代碼對照表
| Style | 輸出範例 | 描述 | 標準 |
| 0 / 100 | May 16 2006 10:57AM | 預設 | - |
| 1 / 101 | 05/16/2006 | 美國 | mm/dd/yyyy |
| 2 / 102 | 2006.05.16 | ANSI | yyyy.mm.dd |
| 3 / 103 | 16/05/2006 | 英國/法國 | dd/mm/yyyy |
| 4 / 104 | 16.05.2006 | 德國 | dd.mm.yyyy |
| 5 / 105 | 16-05-2006 | 義大利 | dd-mm-yyyy |
| 6 / 106 | 16 May 2006 | - | dd mon yyyy |
| 7 / 107 | May 16, 2006 | - | mon dd, yyyy |
| 8 / 108 | 10:57:49 | 時間 | hh:mi:ss |
| 9 / 109 | May 16 2006 10:57:49:123AM | 預設+毫秒 | - |
| 10 / 110 | 05-16-2006 | 美國 | mm-dd-yyyy |
| 11 / 111 | 2006/05/16 | 日本 | yyyy/mm/dd |
| 12 / 112 | 20060516 | ISO | yyyymmdd |
| 13 / 113 | 16 May 2006 10:57:49:123 | 歐洲預設+毫秒 | dd mon yyyy hh:mi:ss:mmm (24h) |
| 14 / 114 | 10:57:49:123 | 時間+毫秒 | hh:mi:ss:mmm (24h) |
| 20 / 120 | 2006-05-16 10:57:49 | ODBC | yyyy-mm-dd hh:mi:ss |
| 21 / 121 | 2006-05-16 10:57:49.123 | ODBC+毫秒 | yyyy-mm-dd hh:mi:ss.mmm |
| 126 | 2006-05-16T10:57:49.123 | ISO8601 | XML/JSON 標準 |
| 130 | 18 ??? ????? 1427 10:57:49:123AM | Hijri (伊斯蘭曆) | 科威特演算法 |
| 131 | 18/04/1427 10:57:49:123AM | Hijri | dd/mm/yyyy hh:mi:ss:mmmAM |
關鍵規律與建議
- Style ≥ 100 含世紀 (yyyy),Style < 100 兩位年 (yy) → 生產環境禁用 < 100
- 跨系統/跨語系/日誌/JSON:統一用 120/121/126 (ISO8601 無歧義)
- 僅需日期:
CONVERT(DATE, dt) (SQL 2008+) 或 style 112/102/103/104/105
- 僅需時間:
CONVERT(TIME, dt) (SQL 2008+) 或 style 108/114
- 截斷控制:
VARCHAR(10) 只取日期部,VARCHAR(19) 含秒,VARCHAR(23) 含毫秒
反向解析:字串 → 日期
-- 明確指定 style 避免語系歧義
SELECT CONVERT(DATETIME, '2006-05-16 10:57:49', 120); -- ODBC
SELECT CONVERT(DATETIME, '16/05/2006', 103); -- 英式
SELECT CONVERT(DATETIME, '20060516', 112); -- ISO 純數字