如何在PostgreSQL中使用逗号分数分隔符转换间隔数

时间:2016-10-24 11:33:24

标签: postgresql

目前正在寻找转换数字的方式:

 699 937,57 

  699937.57

我正在寻找像

这样的东西
SELECT to_number(column, 'FM99G999G999') from mytable;

但最后一个例子将丢弃十进制数

1 个答案:

答案 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