regexp_replace, чтобы заменить запятую из чисел - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть необходимость, где я хочу заменить запятую, если она является частью значения Amount в строке, и оставить остальные символы такими, как есть.

До: 'AAAA, 095,3 USD , ВСЕ ЕСТЬ хорошо, 5324, agx3, xxyy 24 yz'
После: «AAAA, 0953 USD , ВСЕ ЕСТЬ хорошо, 5324, agx3, xxyy 24 yz»

запятые, которые действуют как разделитель между строками, должны быть сохранены и могут быть заменены чем-то более простым для идентификации. (Я использовал трубу, чтобы сохранить в качестве разделителя)

Я попробовал ниже, но нужна рекомендация, чтобы исправить это:

select regexp_replace('AAAA, **0953 USD**, ALL IS good ,5324, agx3, xxyy 24 yz','[^a-zA-Z0-9]+','|'); 

результат

AAAA|0953|USD|ALL|IS|good|5324|agx3|xxyy|24|yz

Требуется:

AAAA|0953 USD|ALL IS good|5324|agx3|xxyy 24|yz

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Основываясь на Синтаксис Oracle для REGEXP_REPLACE и некоторые проверки здесь , я думаю, что это может сделать то, что вы хотите:

REGEXP_REPLACE( 'AAAA, 095,3 USD, ALL IS good ,5324, agx3, xxyy 24 yz',
                '([0-9]+),([0-9]+) USD',
                '\1\2 USD' )

ОП указал, что база данных - Импала. Согласно открытию OP, правильный синтаксис:

REGEXP_REPLACE( 'AAAA, 095,3 USD, ALL IS good ,5324, agx3, xxyy 24 yz',
                '([0-9]+),([0-9]+) USD',
                '\\1\\2 USD' )

См. Комментарии ниже для контекста.

0 голосов
/ 01 ноября 2018

выберите REGEXP_REPLACE ('AAAA, 095,3 USD, ВСЕ ЕСТЬ хорошо, 5324, agx3, xxyy 24 yz', '([0-9] +), ([0-9] +)', '\ 1 \ 2 '); это работает только что понял, что Imapala использует extra \, чтобы заставить его работать. Спасибо StoneGiant

0 голосов
/ 01 ноября 2018

Если поддерживаются обходные пути, это будет работать:

(?<=\d),(?=\d)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...