目前正在寻找转换数字的方式:
699 937,57
向
699937.57
我正在寻找像
这样的东西SELECT to_number(column, 'FM99G999G999') from mytable;
但最后一个例子将丢弃十进制数
答案 0 :(得分:1)
用点替换逗号可能更容易,然后将结果转换为数字:
select to_number(replace(the_column, ',', '.'), 'FM999999.99')
from mytable
但是,这需要您知道小数点前的最大位数。另一种选择是从字符串中删除所有空格(在替换逗号后),然后将其转换为数字:
select regexp_replace(replace(the_column, ',', '.'), '\s+', '', 'g')::numeric
from mytable;
正则表达式有些昂贵,第二个解决方案可能比第一个解决方案更慢(但更强大)。
以下内容:
with mytable (the_column) as (
values ('699 937,57'), ('123,45'), ('456,789'), ('123 456 789,1234')
)
select regexp_replace(replace(the_column, ',', '.'), '\s+', '', 'g')::numeric
from mytable;
返回:
regexp_replace
--------------
699937.57
123.45
456.789
123456789.1234