В postgresql я пытаюсь вернуть форматированное значение цены за цену в текстовом поле, но ТОЛЬКО, когда значение текстового поля не содержит другого лишнего текста.postgresql regex grouping + вопросы литья при извлечении ценового текста
Например, с этими тремя текстовыми значениями ...
'предлагает более $ 580000'
'499000'
'NOW $ 419000 - WAS $ 459000'
Я хотел бы вернуться ...
'предлагает более $ 580000'
'$ 499000'
'NOW $ 419000 - WAS $ 459000'
Я пытаюсь использовать регулярное выражение для извлечения моего значения и затем кастинг до десятичного и затем форматирование вывода, чтобы получить значение, которое я хочу. Например ...
SELECT
CASE WHEN COALESCE(SUBSTRING(btrim('499000'::text) FROM '(^(\$?[0-9,]*)(\.[0-9]{2})?)$'),'') != ''
THEN to_char(substring('499000' FROM '^((\$?[0-9,]*)(\.[0-9]{2})?)$')::decimal, 'FM$999,999,999'::text)
ELSE '499000'
END as testresult
Когда я поменять на «499000» для «предлагает более $ 580000» Я получаю сообщение об ошибке, потому что регулярное выражение по-прежнему собирание это вверх как действительные, а затем пытается преобразовать его в десятичную. Однако мне трудно понять, почему это второе значение передаёт регулярное выражение, потому что я говорю, что строка должна начинаться с опции dollar-sign + number combo. Я думаю.
Может ли кто-нибудь указать мне в правильном направлении на этом? Я видел множество других сообщений регулярных выражений, но ни один из них не помог мне ответить на этот вопрос (с удовольствием указывал на другой пост, если он содержит решение).
Спасибо!
Отлично! Это работает! Благодаря! – user1399906