Как преобразовать число через интервал с разделителем в виде запятой в PostgreSQL

#postgresql

#postgresql

Вопрос:

В настоящее время изучается способ преобразования числа, подобного:

  699 937,57 
  

В

   699937.57
  

Я изучаю что-то вроде

 SELECT to_number(column, 'FM99G999G999') from mytable;
  

Но в последнем примере будут удалены десятичные числа

Ответ №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