CONVERT 是 SQL Server 日期格式化的核心函數,透過第三個參數 style 控制輸出格式。本文整理 100+ 樣式代碼完整對照表,標註常用格式,並補充儲存程序常用技巧(迴圈、動態 SQL、備份收縮、字串修剪)。
| Style | 輸出範例 | 說明 |
|---|---|---|
| 0 / 100 | Mon DD YYYY HH:MIAM/PM | 預設 (含毫秒) |
| 1 / 101 | MM/DD/YY / MM/DD/YYYY | 美式 |
| 2 / 102 | YY.MM.DD / YYYY.MM.DD | ANSI |
| 3 / 103 | DD/MM/YY / DD/MM/YYYY | 英式/歐式 |
| 4 / 104 | DD.MM.YY / DD.MM.YYYY | 德式 |
| 5 / 105 | DD-MM-YY / DD-MM-YYYY | 義式 |
| 6 / 106 | DD Mon YY / DD Mon YYYY | 月份縮寫 |
| 7 / 107 | Mon DD, YY / Mon DD, YYYY | |
| 8 / 108 | HH:MI:SS | 純時間 |
| 9 / 109 | Mon DD YYYY HH:MI:SS:MMMAM/PM | 含毫秒 |
| 10 / 110 | MM-DD-YY / MM-DD-YYYY | |
| 11 / 111 | YY/MM/DD / YYYY/MM/DD | |
| 12 / 112 | YYMMDD / YYYYMMDD | **常用:無分隔符排序友善** |
| 13 / 113 | DD Mon YYYY HH:MI:SS:MMM | 歐洲預設 + 毫秒 |
| 14 / 114 | HH:MI:SS:MMM | 純時間 + 毫秒 |
| 20 / 120 | YYYY-MM-DD HH:MI:SS | **常用:ISO 8601 排序友善** |
| 21 / 121 | YYYY-MM-DD HH:MI:SS.MMM | ISO + 毫秒 |
| 22 | MM/DD/YY HH:MI:SS AM/PM | |
| 23 | YYYY-MM-DD | **常用:純日期 ISO** |
| 24 | HH:MI:SS | **常用:純時間 24h** |
| 25 | YYYY-MM-DD HH:MI:SS.MMM | |
| 126 | YYYY-MM-DDTHH:MI:SS.MMM | **XML/JSON 標準 ISO 8601** |
| 130 | DD Mon YYYY HH:MI:SS:MMMAM/PM | 伊斯蘭曆 |
| 131 | DD/MM/YYYY HH:MI:SS:MMMAM/PM | 伊斯蘭曆 |
-- 純日期 (排序、分組、檔名)
CONVERT(VARCHAR(10), GETDATE(), 23) -- 2024-01-15
CONVERT(VARCHAR(8), GETDATE(), 112) -- 20240115
-- 純時間
CONVERT(VARCHAR(8), GETDATE(), 108) -- 14:30:05
CONVERT(VARCHAR(8), GETDATE(), 24) -- 14:30:05
-- 完整日期時間 (ISO 8601)
CONVERT(VARCHAR(19), GETDATE(), 120) -- 2024-01-15 14:30:05
CONVERT(VARCHAR(23), GETDATE(), 121) -- 2024-01-15 14:30:05.123
CONVERT(VARCHAR(24), GETDATE(), 126) -- 2024-01-15T14:30:05.123
DECLARE @i INT = 1;
WHILE @i < 30
BEGIN
INSERT INTO test (userid) VALUES (@i);
SET @i = @i + 1;
END;
DECLARE @fld NVARCHAR(255) = 'userName';
DECLARE @sql NVARCHAR(MAX) = 'SELECT ' + QUOTENAME(@fld) + ' FROM tbl';
EXEC sp_executesql @sql;
BACKUP LOG register WITH NO_LOG; -- 2005/2000
BACKUP LOG register WITH TRUNCATE_ONLY; -- 2000
DBCC SHRINKDATABASE(register);
BACKUP LOG ... TO DISK 定期記錄備份,自動截斷 VLF,勿用 TRUNCATE_ONLY。SELECT [id], [gnname], RTRIM([url]) AS url, [gnsm], [gnqx] FROM [bg_gnmx];
-- RTRIM 去右空格、LTRIM 去左空格
-- 使用函數後**必須加別名**,否則前端無法正確繫結欄位名
Style 126 (ISO 8601),避免歧義。CONVERT,導致索引失效 (改用 WHERE datecol >= '2024-01-01' AND datecol < '2024-01-16')。收藏此對照表,下次格式化日期直接複製 Style 代碼,不再需要臨時測試。