在日常处理数据的时候,经常碰上要把数字变成文本的情况。比如统计报表导出时,需要把用户ID拼接到日志信息里,结果发现字段类型对不上——一个整数,一个字符串,直接拼接就报错。这时候就得把整数转成字符串,看似简单,但在不同数据库里写法还真不一样。
MySQL 里的转换方式
MySQL 提供了好几种方法。最常用的是 CAST() 和 CONVERT()。比如你想查用户ID并把它变成字符串拼到消息里:
SELECT CONCAT('用户编号:', CAST(user_id AS CHAR)) FROM users;
也可以用 CONVERT(),效果一样:
SELECT CONCAT('用户编号:', CONVERT(user_id, CHAR)) FROM users;
如果你只是临时查看,甚至可以直接加个空字符串,MySQL 会自动转换:
SELECT '' + user_id FROM users;
PostgreSQL 怎么做
PostgreSQL 支持标准 SQL 的 CAST,也支持双冒号简写。比如:
SELECT '订单号:' || user_id::TEXT FROM orders;
这里的 ::TEXT 就是把整数转成字符串,然后用 || 拼接。看起来更简洁,写起来也顺手。
SQL Server 的常见写法
在 SQL Server 里,可以用 CAST 或 CONVERT,但注意类型名是 VARCHAR 而不是 CHAR:
SELECT '客户ID:' + CAST(customer_id AS VARCHAR) FROM customers;
如果原字段是 NULL,拼接结果也会变成 NULL,这时候可以套个 ISNULL() 避免问题:
SELECT '客户ID:' + ISNULL(CAST(customer_id AS VARCHAR), '未知') FROM customers;
实际场景:导出带说明的报表
公司每月导出活跃用户列表,运营希望每行都带一句“本月活跃用户:[ID]”。原始数据只有整数 ID,直接拼会失败。这时候就得先转类型。以 MySQL 为例:
SELECT
user_id,
CONCAT('本月活跃用户:', CAST(user_id AS CHAR)) AS remark
FROM monthly_active_users;
导出后,Excel 里就能直接看到完整说明,不用再手动处理。
小贴士:别忽视长度限制
用 VARCHAR(10) 转一个很大的整数,万一超长就被截断了。建议不确定时用稍大一点的长度,比如 VARCHAR(20),避免数据出错。尤其是时间戳这种大数值,转字符串时特别容易翻车。