SQL中如何将varchar类型转换为integer类型
SQL 中 VARCHAR 转 INTEGER 解决方案
前置校验要求
转换前需先确认待转换的 VARCHAR 字段内容仅包含数字、正负号(有符号整数场景),无字母、特殊字符等非法内容,否则会触发转换报错。可先执行语句排查非法值:SELECT * FROM 表名 WHERE 待转换字段 NOT REGEXP '^[-]?[0-9]+$';
不同数据库正则语法略有差异,可对应调整匹配规则
主流数据库转换语法
MySQL / MariaDB
- 常规转换两种写法:
- CAST 函数:
SELECT CAST(待转换字段 AS SIGNED) FROM 表名;无符号整数可将SIGNED替换为UNSIGNED - CONVERT 函数:
SELECT CONVERT(待转换字段, UNSIGNED) FROM 表名;
默认遇到非数字内容时会截断到第一个非数字位置转换,例如'123abc'会转为123,需要严格转换可先完成数据清洗
- CAST 函数:
PostgreSQL
- 标准转换:
SELECT CAST(待转换字段 AS INTEGER) FROM 表名; - 容错转换(12+版本支持):转换失败返回NULL,不会中断查询:
SELECT TRY_CAST(待转换字段 AS INTEGER) FROM 表名;
SQL Server
- 常规转换两种写法:
SELECT CAST(待转换字段 AS INT) FROM 表名;SELECT CONVERT(INT, 待转换字段) FROM 表名;
- 容错转换:
SELECT TRY_CAST(待转换字段 AS INT) FROM 表名;
Oracle
- 常规转换:
SELECT TO_NUMBER(待转换字段) FROM 表名; - 容错转换(12c+版本支持):
SELECT TO_NUMBER(待转换字段 DEFAULT NULL ON CONVERSION ERROR) FROM 表名;
修改表字段类型操作指引
如果需要直接调整表结构,把 VARCHAR 字段改为 INTEGER 类型,需先完成全量数据清洗后再执行修改语句,MySQL 示例:ALTER TABLE 表名 MODIFY COLUMN 字段名 INT;
注意:未清洗非法内容直接修改表字段类型,会直接触发执行失败,建议操作前先全量校验数据合法性。
内容的提问来源于stack exchange,提问作者Anna Maria
相关产品推荐
相关产品推荐

