功能重疊: 兩者均可進行類型轉換,語法不同。
CAST:ANSI 標準,語法簡潔,通用性強。
CONVERT:T-SQL 專有,支援格式化樣式碼(日期/數值),功能更強。
-- CAST (ANSI 標準) CAST ( expression AS data_type [ ( length ) ] ) -- CONVERT (T-SQL 專有) CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
SELECT CAST('123' AS INT) -- 123
SELECT CONVERT(INT, '123') -- 123
SELECT CAST(123.4 AS INT) -- 123
SELECT CONVERT(INT, 123.4) -- 123
SELECT CAST('123.4' AS DECIMAL) -- 123
SELECT CONVERT(DECIMAL, '123.4') -- 123
SELECT CAST('123.4' AS DECIMAL(9,2)) -- 123.40
SELECT CONVERT(DECIMAL(9,2), '123.4') -- 123.40
DECLARE @Num MONEY = 1234.56 SELECT CONVERT(VARCHAR(20), @Num, 0) -- 1234.56 (預設,無千分位) SELECT CONVERT(VARCHAR(20), @Num, 1) -- 1,234.56 (千分位逗號) SELECT CONVERT(VARCHAR(20), @Num, 2) -- 1234.5600 (4 位小數)
| Style | 輸出範例 | 說明 |
|---|---|---|
| 101 | 01/15/2024 | 美式 mm/dd/yyyy |
| 102 | 2024.01.15 | yyyy.mm.dd |
| 103 | 15/01/2024 | 英式 dd/mm/yyyy |
| 110 | 01-15-2024 | mm-dd-yyyy |
| 111 | 2024/01/15 | yyyy/mm/dd |
| 112 | 20240115 | ISO yyyymmdd(排序友善) |
| 120 | 2024-01-15 14:30:25 | ODBC 標準 yyyy-mm-dd hh:mi:ss(24h) |
| 121 | 2024-01-15 14:30:25.123 | 含毫秒 |
CAST。CONVERT。SELECT CONVERT(INT, '123.4') -- 錯誤:字串含小數點無法直接轉 INT -- 需先轉 DECIMAL 再轉 INT,或用 ROUND/FLOOR
CAST 走標準簡潔路線,CONVERT 攜格式化大招。實務上:內部運算用 CAST,外部呈現用 CONVERT。