Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 正在尝试将格式不一致的价格字符串转换为美分_Mysql_Sql - Fatal编程技术网

Mysql 正在尝试将格式不一致的价格字符串转换为美分

Mysql 正在尝试将格式不一致的价格字符串转换为美分,mysql,sql,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(price,2)*100似乎在很多方面都起作用时,我满怀希望,包括(

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

-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(price,2)*100似乎在很多方面都起作用时,我满怀希望,包括(!)500/小时:

select format('500/hour', 2) * 100;
-> 50000
但出于某种原因,我得到了3200.00的奇怪结果:

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

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

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

replace(data,',','')
这可能是因为您使用的是varchar类型而不是int类型。如果你这样做

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

它应该能用

@Michael O.我只是修改了你不需要
演员阵容
。MySQL在算术运算中使用时会自动将字符串转换为数字。我只是想回应一下@Barmar,不需要演员阵容。事实上,将CAST()转换为整数会去掉所有浮点数,因此450.5将变成45000,而将CAST()保留在外则会得到正确的输出。原因是
format()
将逗号添加到1000以上的数字。