CONVERT 語法回顧
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
data_type:目標類型 (如 VARCHAR, CHAR, NVARCHAR)。
length:可選長度。
expression:待轉換的表達式 (通常是 GETDATE() 或 datetime 列)。
style:核心參數,指定輸出格式編號,僅在 datetime/smalldatetime 與字符串類型互轉時生效。
Style 編號完整對照表
| 無世紀 (yy) | 有世紀 (yyyy) | 標準/說明 | 輸出示例 |
| 0 或 100* | 100 | 默認 | mon dd yyyy hh:miAM (如: Jan 15 2024 10:30AM) |
| 1 | 101 | 美國 | mm/dd/yyyy (如: 01/15/2024) |
| 2 | 102 | ANSI | yy.mm.dd / yyyy.mm.dd |
| 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:mm:ss (僅時間) |
| 9 或 109* | 109 | 默認+毫秒 | mon dd yyyy hh:mi:ss:mmmAM |
| 10 | 110 | 美國 | mm-dd-yy / mm-dd-yyyy |
| 11 | 111 | 日本 | yy/mm/dd / yyyy/mm/dd |
| 12 | 112 | ISO | yymmdd / yyyymmdd |
| 13 或 113* | 113 | 歐洲默認+毫秒 | dd mon yyyy hh:mm:ss:mmm (24h) |
| 14 | 114 | - | hh:mi:ss:mmm (24h, 僅時間) |
| 20 或 120* | 120 | ODBC 標準 | yyyy-mm-dd hh:mm:ss[.fff] |
| 21 或 121* | 121 | ODBC+毫秒 | yyyy-mm-dd hh:mm:ss[.fff] |
| - | 126*** | ISO8601 | yyyy-mm-ddThh:mm:ss.mmm (無空格, 用於 XML) |
| 130* | 130 | Hijri (科威特算法) | dd mon yyyy hh:mi:ss:mmmAM |
| 131* | 131 | Hijri | dd/mm/yy hh:mi:ss:mmmAM |
註釋說明:
- * 默認值 (0/100, 9/109, 13/113, 20/120, 21/121) 始終返回世紀位 (yyyy)。
- ** 轉換 為 datetime 時為輸入格式;轉換 為 字符數據時為輸出格式。
- *** 專用於 XML。float/money/smallmoney→字符等同 style 2;real→字符等同 style 1。
- Hijri 為伊斯蘭曆,SQL Server 採用科威特算法。
無世紀位格式實測代碼 (Style 0-25)
SELECT CONVERT(VARCHAR(100), GETDATE(), 0) AS Style0 -- Jan 15 2024 10:30AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 1) AS Style1 -- 01/15/24
SELECT CONVERT(VARCHAR(100), GETDATE(), 2) AS Style2 -- 24.01.15
SELECT CONVERT(VARCHAR(100), GETDATE(), 3) AS Style3 -- 15/01/24
SELECT CONVERT(VARCHAR(100), GETDATE(), 4) AS Style4 -- 15.01.24
SELECT CONVERT(VARCHAR(100), GETDATE(), 5) AS Style5 -- 15-01-24
SELECT CONVERT(VARCHAR(100), GETDATE(), 6) AS Style6 -- 15 Jan 24
SELECT CONVERT(VARCHAR(100), GETDATE(), 7) AS Style7 -- Jan 15, 24
SELECT CONVERT(VARCHAR(100), GETDATE(), 8) AS Style8 -- 10:30:45
SELECT CONVERT(VARCHAR(100), GETDATE(), 9) AS Style9 -- Jan 15 2024 10:30:45:123AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 10) AS Style10 -- 01-15-24
SELECT CONVERT(VARCHAR(100), GETDATE(), 11) AS Style11 -- 24/01/15
SELECT CONVERT(VARCHAR(100), GETDATE(), 12) AS Style12 -- 240115
SELECT CONVERT(VARCHAR(100), GETDATE(), 13) AS Style13 -- 15 Jan 2024 10:30:45:123
SELECT CONVERT(VARCHAR(100), GETDATE(), 14) AS Style14 -- 10:30:45:123
-- 15-19 保留/無效
SELECT CONVERT(VARCHAR(100), GETDATE(), 20) AS Style20 -- 2024-01-15 10:30:45
SELECT CONVERT(VARCHAR(100), GETDATE(), 21) AS Style21 -- 2024-01-15 10:30:45.123
SELECT CONVERT(VARCHAR(100), GETDATE(), 22) AS Style22 -- 01/15/24 10:30:45 AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 23) AS Style23 -- 2024-01-15
SELECT CONVERT(VARCHAR(100), GETDATE(), 24) AS Style24 -- 10:30:45
SELECT CONVERT(VARCHAR(100), GETDATE(), 25) AS Style25 -- 2024-01-15 10:30:45.250
-- 26-31 保留/無效
有世紀位格式實測代碼 (Style 100-131)
SELECT CONVERT(VARCHAR(100), GETDATE(), 100) AS Style100 -- Jan 15 2024 10:30AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 101) AS Style101 -- 01/15/2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 102) AS Style102 -- 2024.01.15
SELECT CONVERT(VARCHAR(100), GETDATE(), 103) AS Style103 -- 15/01/2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 104) AS Style104 -- 15.01.2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 105) AS Style105 -- 15-01-2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 106) AS Style106 -- 15 Jan 2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 107) AS Style107 -- Jan 15, 2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 108) AS Style108 -- 10:30:45
SELECT CONVERT(VARCHAR(100), GETDATE(), 109) AS Style109 -- Jan 15 2024 10:30:45:123AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 110) AS Style110 -- 01-15-2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 111) AS Style111 -- 2024/01/15
SELECT CONVERT(VARCHAR(100), GETDATE(), 112) AS Style112 -- 20240115
SELECT CONVERT(VARCHAR(100), GETDATE(), 113) AS Style113 -- 15 Jan 2024 10:30:45:123
SELECT CONVERT(VARCHAR(100), GETDATE(), 114) AS Style114 -- 10:30:45:123
-- 115-119 保留
SELECT CONVERT(VARCHAR(100), GETDATE(), 120) AS Style120 -- 2024-01-15 10:30:45
SELECT CONVERT(VARCHAR(100), GETDATE(), 121) AS Style121 -- 2024-01-15 10:30:45.123
-- 122-125 保留
SELECT CONVERT(VARCHAR(100), GETDATE(), 126) AS Style126 -- 2024-01-15T10:30:45.123
SELECT CONVERT(VARCHAR(100), GETDATE(), 127) AS Style127 -- (保留)
-- 128-129 保留
SELECT CONVERT(VARCHAR(100), GETDATE(), 130) AS Style130 -- 15 جمادى الأولى 1445 10:30:45:123AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 131) AS Style131 -- 15/05/1445 10:30:45:123AM
實戰技巧:格式化並截取日期部分
-- 需求:將 datetime 字段 ss_updatetime 轉為 'YYYY-MM-DD' 格式字符串
SELECT
sr_child AS '孩子姓名',
sr_parents AS '家長姓名',
ss_updatetime AS '原始時間',
-- 方法 1: LEFT + CHARINDEX 截取空格前部分 (適用於有空格分隔的格式)
LEFT(ss_updatetime, CHARINDEX(' ', ss_updatetime) - 1) AS '簡易截取',
-- 方法 2: CONVERT(120) 固定格式 + SUBSTRING 截取前 10 位 (推薦, 穩健)
SUBSTRING(CONVERT(CHAR(19), ss_updatetime, 120), 1, 10) AS '標準日期'
FROM dbo.tb_sell_resources, dbo.tb_sell_selldetails
WHERE sr_id = ss_rsid AND ss_qdstate <> 1
ORDER BY ss_updatetime
輔助函數速查
| 函數 | 語法 | 說明 |
| SUBSTRING | SUBSTRING(expression, start, length) | start 從 1 開始;length 為截取長度 |
| LEFT | LEFT(expression, length) | 從左側截取指定長度 |
| CHARINDEX | CHARINDEX(substring, expression [, start]) | 返回子串首次出現位置,未找到返回 0 |
| STR | STR(float_expression [, length [, decimal]]) | 數值轉字符串,常用於動態 SQL 拼接 TOP 子句 |
常用模式速記
- 標準日期:
CONVERT(CHAR(10), GETDATE(), 120) → 2024-01-15 (推薦,ISO 格式,排序友好)
- 標準日期時間:
CONVERT(CHAR(19), GETDATE(), 120) → 2024-01-15 10:30:45
- 純數字日期:
CONVERT(CHAR(8), GETDATE(), 112) → 20240115 (適合文件名、分區鍵)
- 中文常用:
CONVERT(VARCHAR(100), GETDATE(), 111) → 2024/01/15
版本兼容提示
- Style 126 (ISO8601) 需 SQL Server 2000+。
- Style 127 保留未用。
- SQL Server 2008+ 新增
FORMAT() 函數,支持 .NET 格式字符串,更靈活但性能略低於 CONVERT。