CONVERT 函數語法
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
`style` 參數決定輸出格式,以下為常用格式代碼完整對照 (以 `2006-05-16 10:57:46.827` 為例):
完整格式代碼表
| Style | 標準 | 輸出範例 | 備註 |
| 0 / 100 | 預設 | Mon DD YYYY HH:MIAM/PM | 05 16 2006 10:57AM |
| 1 | USA | MM/DD/YY | 05/16/06 |
| 2 | ANSI | YY.MM.DD | 06.05.16 |
| 3 | British/French | DD/MM/YY | 16/05/06 |
| 4 | German | DD.MM.YY | 16.05.06 |
| 5 | Italian | DD-MM-YY | 16-05-06 |
| 6 | - | DD Mon YY | 16 05 06 |
| 7 | - | Mon DD, YY | 05 16, 06 |
| 8 / 108 | - | HH:MI:SS | 10:57:46 |
| 9 / 109 | 預設+毫秒 | Mon DD YYYY HH:MI:SS:mmmAM/PM | 05 16 2006 10:57:46:827AM |
| 10 | USA | MM-DD-YY | 05-16-06 |
| 11 | Japan | YY/MM/DD | 06/05/16 |
| 12 | ISO | YYMMDD | 060516 |
| 13 / 113 | Europe 默認+毫秒 | DD Mon YYYY HH:MI:SS:mmm | 16 05 2006 10:57:46:937 |
| 14 / 114 | - | HH:MI:SS:mmm | 10:57:46:967 |
| 20 / 120 | ODBC 標準 | YYYY-MM-DD HH:MI:SS | 2006-05-16 10:57:47 |
| 21 / 121 | ODBC+毫秒 | YYYY-MM-DD HH:MI:SS.mmm | 2006-05-16 10:57:47.157 |
| 22 | USA | MM/DD/YY HH:MI:SS AM/PM | 05/16/06 10:57:47 AM |
| 23 | ISO8601 | 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 | USA | MM/DD/YYYY | 05/16/2006 |
| 102 | ANSI | YYYY.MM.DD | 2006.05.16 |
| 103 | British/French | DD/MM/YYYY | 16/05/2006 |
| 104 | German | DD.MM.YYYY | 16.05.2006 |
| 105 | Italian | DD-MM-YYYY | 16-05-2006 |
| 106 | - | DD Mon YYYY | 16 05 2006 |
| 107 | - | Mon DD, YYYY | 05 16, 2006 |
| 110 | USA | MM-DD-YYYY | 05-16-2006 |
| 111 | Japan | YYYY/MM/DD | 2006/05/16 |
| 112 | ISO | YYYYMMDD | 20060516 |
| 126 | ISO8601 (T 分隔) | YYYY-MM-DDTHH:MI:SS.mmm | 2006-05-16T10:57:49.827 |
| 130 | Hijri | DD Mon YYYY HH:MI:SS:mmmAM | 18 ??? ???? 1427 10:57:49:907AM |
| 131 | Hijri | DD/MM/YYYY HH:MI:SS:mmmAM | 18/04/1427 10:57:49:920AM |
高頻使用推薦 (依場景)
| 場景 | 推薦 Style | 範例 | 理由 |
| 純日期 (排序/檔名/分區) | 112 / 23 | 20060516 / 2006-05-16 | 無歧義、字典序即時間序、索引友善 |
| 完整日期時間 (API/日誌/ETL) | 120 / 121 / 126 | 2006-05-16 10:57:49 | ISO 8601 標準、跨語言解析無歧義、含毫秒 |
| 僅時間 | 108 / 24 / 114 | 10:57:49 | 108 含秒、114 含毫秒 |
| 中文報表顯示 | 111 / 110 / 103 | 2006/05/16 | 符合中文/台灣/歐洲閱讀習慣 |
常用輔助函數速查
-- 迴圈範例
DECLARE @i INT = 1;
WHILE @i < 30 BEGIN
INSERT INTO Test (UserID) VALUES (@i);
SET @i += 1;
END
-- 動態欄位名查詢
DECLARE @Fld NVARCHAR(255) = 'UserName', @Sql NVARCHAR(MAX);
SET @Sql = 'SELECT ' + QUOTENAME(@Fld) + ' FROM Tbl';
EXEC sp_executesql @Sql;
-- 縮減記錄檔 (簡單復原模式下)
BACKUP LOG DBName WITH NO_LOG; -- 2005/2008 已棄用
-- 現代寫法:
ALTER DATABASE DBName SET RECOVERY SIMPLE;
DBCC SHRINKFILE (DBName_Log, 1); -- 目標 1MB
ALTER DATABASE DBName SET RECOVERY FULL;
-- 去除空白
RTRIM(LTRIM(Col)) -- 或 TRIM() SQL 2017+
注意事項
- 使用 `CONVERT` 後欄位需加別名 (AS) 否則應用層可能無法正確繫結。
- `Style` 參數為 `INT`,傳入變數時確保型別正確。
- 語系相關格式 (130/131) 依伺服器語言設定輸出月份名稱。