PostgreSQL, regexp

Модератор: Модераторы

PostgreSQL, regexp

Сообщение Lucifer » 04.07.2023 16:38:32

Коллеги, приветствую категорически! Помогите решить задачу, уже третий день бьюсь, и ничего больше в голову не приходит.
Есть вот такая строка:
Код: Выделить всё
'Списание: 30.5500 руб. до 300.0500 руб. далее 10.0000%'

Нужно в ней отформатировать цифири. Чтоб лишние нули после запятой поотрезать. Я уже этих регулярок столько перебрал, что в глазах рябит и моск отказыватеся думать конструктивно.
Нечто похожее родилось, а именно
Код: Выделить всё
select regexp_replace('Списание: 30.5500 руб. до 300.0500 руб. далее 10.0000%',
'(\.?[0]\d?[0]\d{1,})',
'', 'g')

Но оно все равно не то. В первой цифре оставило нули в конце, а во второй наоборот все порезало, что после запятой. Причем, если получится целое число, то точку отрезать тоже надо.
Lucifer
постоялец
 
Сообщения: 110
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: PostgreSQL, regexp

Сообщение WAYFARER » 05.07.2023 11:03:25

Lucifer, кроме неправильной регулярки тут еще и сам подход неверный.
По правильному нужно функцией. Выбираем все числа в массив регуляркой, далее в цикле делаем замену округляя до нужной точности с помощью round.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 520
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: PostgreSQL, regexp

Сообщение Lucifer » 05.07.2023 15:22:34

В общем, если кому интересно. Мою задачу выполняет на ура.
Код: Выделить всё
select regexp_replace('Списание: 30.5500 руб. до 300.0500 руб. далее 10.0001%',
'(?!(\d+\.\d+?[1-9]))0+(?=\s|\%)|\.(?!\d[1-9])0+(?=\s|\%)',
'', 'g')
Lucifer
постоялец
 
Сообщения: 110
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: PostgreSQL, regexp

Сообщение WAYFARER » 06.07.2023 09:47:18

Lucifer писал(а):В общем, если кому интересно. Мою задачу выполняет на ура.


Если в конце будут не нули, то не сработает.
10.0001 так и останется 10.0001.
А если вместо 30.5500 будет, например, 30.5501, то то в результате будет 30.5501
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 520
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: PostgreSQL, regexp

Сообщение Lucifer » 06.07.2023 15:02:15

WAYFARER писал(а):Если в конце будут не нули, то не сработает.

Собственно, именно это мне от регулярки и нужно. Все значащие цифры должны остаться. Отрезать нужно только нули.
Lucifer
постоялец
 
Сообщения: 110
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

Рейтинг@Mail.ru