#postgresql #replace
#postgresql #заменить
Вопрос:
Мой вариант использования выглядит примерно так :
String = "INDIA CANADA ITALY",
String Post Repacement = "IN CA IT"
Я ищу что-то вроде этого :
replaceMultiple(String, "INDIA", "IN", "CANADA", "CA", "ITALY", "IT")
В настоящее время я делаю это с помощью вложенной замены, но она не очень удобочитаема, и если я захочу добавить больше замен, я добавлю ее еще больше.
Может ли это быть достигнуто с помощью функций, таких как создание временной таблицы во время выполнения с помощью пар ключ-значение, и замена каждого ключа в строке значением. Или какой-либо другой метод?
Комментарии:
1. Вы ищете regexp_replace(источник, шаблон, замена [, флаги ])?
2. @ChrisB AFAIK regexp_replace(источник, шаблон, замена [, флаги ]) работает только для шаблона, который должен быть заменен одной заменой. То, что я ищу, — это несколько замен ключ-значение.
3. Если вас беспокоит удобочитаемость, я бы написал свою собственную функцию
replace_multiple()
Ответ №1:
Есть много способов сделать это.
Вы могли бы использовать временные таблицы и regexp_replace
, или вы могли бы использовать словарь JSON, подобный этому:
SELECT string_agg(
COALESCE(
'{ "INDIA": "IN", "CANADA": "CA", "ITALY": "IT" }'::jsonb->>s,
s
),
' '
)
FROM regexp_split_to_table('INDIA CANADA ITALY', 's') s;