首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL VARCHAR 與 INTEGER 類型互轉實戰:CAST 與 CONCAT 組合技

     編輯:MySQL 綜合教學

在預存程序或動態 SQL 中,經常需要將字串型數值轉為整數運算後再轉回字串。MySQL 提供 CAST(... AS SIGNED/UNSIGNED) 與隱式轉換機制,結合 CONCAT 或空字串拼接即可輕鬆實現雙向轉換。

核心範例:字串遞增


DECLARE bn VARCHAR(30) DEFAULT '';
SET bn = (CAST(bn AS SIGNED INTEGER) + 1) + '';
-- 解析:bn 轉整數 → +1 運算 → 拼接空字串隱式轉回 VARCHAR

轉換函式對照表

目標類型函式寫法適用場景
SIGNED INTEGERCAST(expr AS SIGNED)可能為負數的業務 ID、溫度值
UNSIGNED INTEGERCAST(expr AS UNSIGNED)自增 ID、計數器、無符號業務碼
DECIMAL(p,s)CAST(expr AS DECIMAL(10,2))金額、匯率、精度敏感計算
CHAR/VARCHARCONCAT(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 略快,但可讀性較差。
  • 大表排序/分組前轉換類型會導致「Using filesort」,建議在寫入端統一類型或建立函式索引(MySQL 8.0+ 支援)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved