-- CAST (ANSI 標準)
CAST(expression AS data_type)
-- CONVERT (SQL Server 專屬,支援 style)
CONVERT(data_type[(length)], expression [, style])
| 場景 | T-SQL | 結果/說明 |
|---|---|---|
| 大整數 → 16 進位 → 取後 6 碼 → 十進位 | SELECT 22222222 - CONVERT(bigint, 2222222222 / CONVERT(int, 0x1000000) * CONVERT(int, 0x1000000)) | 7629710 (位元運算技巧) |
| 數值 → 字串做 LIKE 比對 | SELECT * FROM titles WHERE CAST(ytd_sales AS char(20)) LIKE '3%' | 避免隱含轉換導致索引失效 |
| 數值加百分號顯示 | SELECT CAST(field1/field2 AS varchar(20)) + '%' | 報表常用 |
| 四捨五入取整 | SELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS Copies FROM titles | |
| CASE 回傳值統一轉型 | SELECT CONVERT(target_type, CASE ... END) | 確保 CASE 分支型別一致 |
| 密碼大小寫敏感比對 | WHERE CAST(pwd AS varbinary) = CAST(@input AS varbinary) | 二進位比較區分大小寫 |
| 日期格式化 (常用) | CONVERT(char(10), GETDATE(), 101) | 04/18/2003 (美式) |
CONVERT(char(10), GETDATE(), 102) | 2003.04.18 (ANSI) | |
CONVERT(char(10), GETDATE(), 121) | 2003-04-18 (ODBC/ISO) |
style 參數功能強大WHERE varchar_col = 123 導致索引掃描,改為 WHERE varchar_col = '123' 或 WHERE CAST(varchar_col AS int) = 123 (但後者仍可能掃描,最好修正應用層參數型別)TRY_CAST / TRY_CONVERT (SQL 2012+):轉換失敗回傳 NULL 而非報錯,適合髒資料清洗轉換函數是 T-SQL 基石,熟練掌握 style 代碼與隱含轉換陷阱,能避免 80% 的型別相關 Bug 與效能問題。