#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