试图将格式不一致的价格字符串转换为美分

时间:2017-06-06 15:23:12

标签: mysql sql

我将数据从一个数据库迁移到另一个数据库,并且正在编写相应的脚本。我想从一个干净的平板开始并修复前一个应用程序允许的许多不一致格式,特别是价格,以下都是当前存储在以前数据库中的价格示例:

-100.00
700.00
0.01
3,200.00
3200
1,750.5
0
500/hour

我想将所有内容转换成美分,所以上面会是:

-10000
70000
1
320000
320000
175050
0
50000

当FORMAT(价格,2)* 100似乎适用于其中很多时,我很有希望,包括(!)500 /小时:

select format('500/hour', 2) * 100;
-> 50000

但出于某种原因,我得到了3200.00的奇怪结果:

select format('3200.00', 2) * 100;
-> 300

写这篇文章的时候,它似乎不适用于1000以上的任何数字字符串,而且我猜测它与逗号的存在/缺失有关。有没有什么聪明的方法可以将上面的例子解析成美分?如果它足够简单,我很乐意将它合并到select查询中,但用户定义的函数也可以。

1 个答案:

答案 0 :(得分:3)

您可以先用以下句子删除逗号:

replace(data,',','')

这可能是因为你有一个varchar类型而不是int类型。如果你这样做

select cast(replace('3,200.00',',','') as signed) * 100

应该有效