PostgreSQL, regexp

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

Ответить
Lucifer
постоялец
Сообщения: 133
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

PostgreSQL, regexp

Сообщение Lucifer »

Коллеги, приветствую категорически! Помогите решить задачу, уже третий день бьюсь, и ничего больше в голову не приходит.
Есть вот такая строка:

Код: Выделить всё

'Списание: 30.5500 руб. до 300.0500 руб. далее 10.0000%'
Нужно в ней отформатировать цифири. Чтоб лишние нули после запятой поотрезать. Я уже этих регулярок столько перебрал, что в глазах рябит и моск отказыватеся думать конструктивно.
Нечто похожее родилось, а именно

Код: Выделить всё

select regexp_replace('Списание: 30.5500 руб. до 300.0500 руб. далее 10.0000%',
'(\.?[0]\d?[0]\d{1,})',
'', 'g')
Но оно все равно не то. В первой цифре оставило нули в конце, а во второй наоборот все порезало, что после запятой. Причем, если получится целое число, то точку отрезать тоже надо.
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 567
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

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

Сообщение Lucifer »

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

Код: Выделить всё

select regexp_replace('Списание: 30.5500 руб. до 300.0500 руб. далее 10.0001%',
'(?!(\d+\.\d+?[1-9]))0+(?=\s|\%)|\.(?!\d[1-9])0+(?=\s|\%)',
'', 'g')
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 567
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

Lucifer писал(а):В общем, если кому интересно. Мою задачу выполняет на ура.
Если в конце будут не нули, то не сработает.
10.0001 так и останется 10.0001.
А если вместо 30.5500 будет, например, 30.5501, то то в результате будет 30.5501
Lucifer
постоялец
Сообщения: 133
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Сообщение Lucifer »

WAYFARER писал(а):Если в конце будут не нули, то не сработает.
Собственно, именно это мне от регулярки и нужно. Все значащие цифры должны остаться. Отрезать нужно только нули.
Ответить