在預存程序或動態 SQL 中,經常需要將字串型數值轉為整數運算後再轉回字串。MySQL 提供 CAST(... AS SIGNED/UNSIGNED) 與隱式轉換機制,結合 CONCAT 或空字串拼接即可輕鬆實現雙向轉換。
DECLARE bn VARCHAR(30) DEFAULT '';
SET bn = (CAST(bn AS SIGNED INTEGER) + 1) + '';
-- 解析:bn 轉整數 → +1 運算 → 拼接空字串隱式轉回 VARCHAR
| 目標類型 | 函式寫法 | 適用場景 |
|---|---|---|
| SIGNED INTEGER | CAST(expr AS SIGNED) | 可能為負數的業務 ID、溫度值 |
| UNSIGNED INTEGER | CAST(expr AS UNSIGNED) | 自增 ID、計數器、無符號業務碼 |
| DECIMAL(p,s) | CAST(expr AS DECIMAL(10,2)) | 金額、匯率、精度敏感計算 |
| CHAR/VARCHAR | CONCAT(expr, '') / CAST(expr AS CHAR) | 動態 SQL 拼接、報表輸出格式化 |
-- 查詢中直接轉換排序
SELECT id, name FROM products ORDER BY CAST(price AS DECIMAL(10,2)) DESC;
-- 安全轉換:非數值字串返回 NULL 而非 0
SELECT CAST('abc' AS UNSIGNED); -- 結果 0(隱式行為)
SELECT 'abc' + 0; -- 結果 0,觸發 Warning
-- 生產建議:配合 REGEXP 過濾
SELECT CASE WHEN col REGEXP '^[0-9]+$' THEN CAST(col AS UNSIGNED) END AS num_val FROM t;
col + 0、CONCAT(col, ''))比顯式 CAST 略快,但可讀性較差。