Какой наиболее читаемый способ заменить несколько строк заменами в строке в postgresql.

#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;