MySQL含货币符号字符串转数字,实操方法来了

发布时间:昨天 阅读:11 次

MySQL含货币符号字符串转数字,实操方法来了

从旧财务系统迁移数据时,金额字段里常常混着¥、$、€这类货币符号。直接对这种字段做SUM或CAST,结果要么是NULL要么报错。核心思路其实不复杂:先把符号剥离MySQL含货币符号字符串转数字,实操方法来了,再转数值。下面把实际用到过的几种写法摊开来讲。

REPLACE是最低成本的办法。如果符号固定,比如全是¥,一条语句搞定:CAST(REPLACE(amount, '¥', '') AS DECIMAL(18,2))。但现实是脏数据里¥、$、逗号、空格都可能出现,得嵌套多个REPLACE逐层清洗,写起来冗长但逻辑清晰,适合一次性跑批。

MySQL含货币符号字符串转数字,实操方法来了

MySQL 8.0之后可以用REGEXP_REPLACE一步到位:REGEXP_REPLACE(amount, '[^0-9\.\-]', '') 把所有非数字、非小数点、非负号的字符一次清掉,比嵌套五六个REPLACE干净得多。低版本没有这个函数,就只能老老实实套REPLACE,或者用SUBSTRING加LOCATE手动截取。

坑比想象中多。千分位逗号"1,234.56"直接当数字转就炸,得先去逗号;负数前缀如果是全角减号"−50"mySQL含货币符号字符串转数字,正则里的半角\-匹配不到;还有带"元""RMB"后缀的。跑批前一定要先SELECT DISTINCT抽样看原始值分布,别假设数据格式统一,清洗逻辑才能兜住所有情况。

相关阅读