語法
CONVERT(data_type(length), expression, style)
style 代碼決定輸出格式,以下為 datetime 常用樣式(以 2006-05-16 10:57:46.827 為例)。
不含世紀 (yy) 的樣式
| Style | 標準 | 輸出範例 | 備註 |
| 0 / 100 | 預設 | Mon DD YYYY HH:MIAM/PM | 05 16 2006 10:57AM |
| 1 | 美國 | MM/DD/YY | 05/16/06 |
| 2 | ANSI | YY.MM.DD | 06.05.16 |
| 3 | 英式/法式 | DD/MM/YY | 16/05/06 |
| 4 | 德式 | DD.MM.YY | 16.05.06 |
| 5 | 義式 | DD-MM-YY | 16-05-06 |
| 6 | | DD MON YY | 16 05 06 |
| 7 | | MON DD, YY | 05 16, 06 |
| 8 | | HH:MI:SS | 10:57:46 |
| 9 / 109 | 預設+毫秒 | Mon DD YYYY HH:MI:SS:MMMAM/PM | 05 16 2006 10:57:46:827AM |
| 10 | 美國 | MM-DD-YY | 05-16-06 |
| 11 | 日本 | YY/MM/DD | 06/05/16 |
| 12 | ISO | YYMMDD | 060516 |
| 13 | 歐洲預設 | DD MON YYYY HH:MI:SS:MMM(24h) | 16 05 2006 10:57:46:937 |
| 14 | | HH:MI:SS:MMM(24h) | 10:57:46:967 |
含世紀 (yyyy) 的樣式 (建議優先使用)
| Style | 標準 | 輸出範例 | 備註 |
| 20 | ODBC 標準 | YYYY-MM-DD HH:MI:SS | 2006-05-16 10:57:47 |
| 21 | ODBC + 毫秒 | YYYY-MM-DD HH:MI:SS.MMM | 2006-05-16 10:57:47.157 |
| 22 | 美國 | MM/DD/YY HH:MI:SS AM/PM | 05/16/06 10:57:47 AM |
| 23 | ISO 8601 | YYYY-MM-DD | 2006-05-16 |
| 24 | | HH:MI:SS | 10:57:47 |
| 25 | | YYYY-MM-DD HH:MI:SS.MMM | 2006-05-16 10:57:47.250 |
| 101 | 美國 | MM/DD/YYYY | 05/16/2006 |
| 102 | ANSI | YYYY.MM.DD | 2006.05.16 |
| 103 | 英式/法式 | DD/MM/YYYY | 16/05/2006 |
| 104 | 德式 | DD.MM.YYYY | 16.05.2006 |
| 105 | 義式 | DD-MM-YYYY | 16-05-2006 |
| 106 | | DD MON YYYY | 16 05 2006 |
| 107 | | MON DD, YYYY | 05 16, 2006 |
| 108 | | HH:MI:SS | 10:57:49 |
| 110 | 美國 | MM-DD-YYYY | 05-16-2006 |
| 111 | 日本 | YYYY/MM/DD | 2006/05/16 |
| 112 | ISO | YYYYMMDD | 20060516 |
| 113 | 歐洲預設+毫秒 | DD MON YYYY HH:MI:SS:MMM(24h) | 16 05 2006 10:57:49:513 |
| 120 | ODBC 標準 | YYYY-MM-DD HH:MI:SS | 2006-05-16 10:57:47 |
| 121 | ODBC + 毫秒 | YYYY-MM-DD HH:MI:SS.MMM | 2006-05-16 10:57:47.157 |
| 126 | ISO 8601 | YYYY-MM-DDTHH:MI:SS.MMM | 2006-05-16T10:57:47.157 |
| 127 | ISO 8601 (UTC) | YYYY-MM-DDTHH:MI:SS.MMMZ | 2006-05-16T10:57:47.157Z |
| 130 | 回曆 | DD MON YYYY HH:MI:SS:MMMAM/PM | 17 04 1427 10:57:47:157AM |
| 131 | 回曆 | DD/MM/YYYY HH:MI:SS:MMMAM/PM | 17/04/1427 10:57:47:157AM |
實用技巧
-- 1. 只取日期部分 (效能優於 CAST)
SELECT CONVERT(DATE, GETDATE()); -- SQL 2008+
SELECT CONVERT(CHAR(10), GETDATE(), 120); -- 2006-05-16
-- 2. 只取時間部分
SELECT CONVERT(TIME, GETDATE()); -- SQL 2008+
SELECT CONVERT(CHAR(8), GETDATE(), 108); -- 10:57:46
-- 3. 檔案命名安全格式 (無特殊字元)
SELECT REPLACE(CONVERT(CHAR(19), GETDATE(), 120), ':', '') -- 20060516105746
+ REPLACE(CONVERT(CHAR(3), GETDATE(), 121), '.', ''); -- +毫秒
-- 4. 中文顯示格式
SELECT CONVERT(NVARCHAR, GETDATE(), 111) + N' ' +
DATENAME(WEEKDAY, GETDATE()); -- 2006/05/16 星期二
注意事項
- Style 代碼為 int,不可用變數動態指定(需動態 SQL)。
- SQL Server 2012+ 新增
FORMAT() 函數,支援 .NET 格式字串(如 FORMAT(GETDATE(), 'yyyy-MM-dd', 'zh-TW')),但效能較 CONVERT 低。
- 跨語系環境建議使用 Style 112/120/126 等 ISO 格式,避免月份名稱語系差異。