#amazon-redshift #regexp-replace
#amazon-redshift #регулярное выражение-заменить
Вопрос:
У меня есть строка типа: ‘запустите строку {замените это}, продолжите строку {замените это тоже} и для хорошей оценки, продолжите строку еще немного’ Мне нужен результат, который будет: ‘запустите строку %, продолжите строку % и для хорошей оценки, продолжите строку еще немного’
Я пытаюсь заменить любое / все вхождения открытых / закрытых волнистых скобок на % для использования в динамической инструкции SQL с использованием оператора like.
Ответ №1:
Чтобы заменить {replace this}
подобные строки на %
, вы можете использовать функцию замены регулярного выражения, подобную этой:
with input(txt) as (
select 'start the string {replace this} continue the string {replace this too} and for good measure, continue the string some more'::varchar
)
select regexp_replace(txt, '\{[\w\s]*\}', '%') from input;
ВОЗВРАТ
start the string % continue the string % and for good measure, continue the string some more
Но вместо того, чтобы выполнять описанный 2-шаговый поиск, где вы сначала заменяете все части шаблона на %
, а затем выполняете LIKE
поверх этого, почему бы просто не выполнить поиск по регулярному выражению?
with input(txt) as (
select 'start the string {replace this} continue the string {replace this too} and for good measure, continue the string some more'::varchar
)
select txt from input
where
txt ~ 'start the string \{.*\} continue the string \{.*\} and for good measure, continue the string some more'
Комментарии:
1. большое вам спасибо, ботчняк, это выглядит интересно, но мне трудно применить это к деталям моей проблемы, поэтому вот еще немного. У меня есть таблица FOO, в которой есть текст «Спасибо, Билли, за покупку цветов на 20202/01/01», в строке таблицы у меня есть текстовый шаблон с template_id 1 и «Спасибо {firstname} за покупку {item} на {date}», и мне нужно, чтобы текст из FOO мог присоединиться к строке и получить template_id 1. Не уверен, что я только что сделал это более запутанным, но позвольте мне поработать с вашим предложением, опять же, очень признателен!
2. Я смог воспользоваться вашим руководством и применить его к своему варианту использования и заставить его работать, большое спасибо, я опубликую решение, как только немного почищу!
3. Если ответ был полезным, вы можете считать, что маркировка является принятой 🙂