带点分隔符的文本型数字转int类型报错求助
解决方法
你的问题核心是字符串里的.是千位分隔符而非小数点位,直接转换会被数据库误解析,必须先移除所有分隔符,再转成整数。
步骤1:移除所有千位分隔符
用REPLACE()函数把字符串里的.全部替换为空,得到纯数字字符串:
SELECT REPLACE(Text_table, '.', '') FROM your_table;
执行后会得到正确的纯数字序列:
1245634 2795734 14235636 1242830 17397634 16285634
步骤2:转换为INT类型
方式一:查询时临时转换
如果不需要修改原表结构,仅在查询时获取整数结果:
SELECT CAST(REPLACE(Text_table, '.', '') AS INT) AS int_value FROM your_table;
方式二:修改原列类型(永久变更)
如果要把原列直接改成INT类型,分两步执行:
- 先更新列内容,移除所有
.:
UPDATE your_table SET Text_table = REPLACE(Text_table, '.', '');
- 修改列属性为INT:
ALTER TABLE your_table MODIFY COLUMN Text_table INT;
为什么之前的方法失败?
- 直接修改列属性/用
CAST(Text_table AS INT):数据库会把第一个.当作小数分隔符,只读取.前的部分(比如1.245.634会被截断为1)。 - 用
CAST(Text_table AS DECIMAL):同样把第一个.当作小数点,后续的.会导致解析错误,最终丢失部分数字。
内容的提问来源于stack exchange,提问作者Strovic
相关产品推荐
相关产品推荐

