PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Замяна на низ с друг низ от списък в зависимост от стойността

За няколко взаимно изключващи се замени, вложените изрази за замяна са най-простият и бърз начин. Точно както @Gordon предлага .

Но това не се мащабира добре за повече от няколко замени и има клопки :

Поднизове

Става двусмислено, когато низовете могат да бъдат поднизове един на друг. Разгледайте тези два израза:

SELECT replace((replace('2015 (Monday)', 'day', 'snake'), 'Monday', 'dog')
     , replace((replace('2015 (Monday)', 'Monday', 'dog'), 'day', 'snake');

Резултатът зависи от последователността на заместванията. Трябва да определите приоритетите. Обикновено първо ще замените по-дългите низове.

Вериги

След това има и възможност една замяна да създаде съвпадение за следващата:

SELECT replace((replace('2015 (Sunday)', 'Sun', 'Mon'), 'Monday', 'dog')
     , replace((replace('2015 (Sunday)', 'Monday', 'dog'), 'Sun', 'Mon');

Отново трябва да определите приоритетите.
Всяка замяна може да повлияе на следващата. С повече от няколко замени, това бързо става мътно и податливо на грешки. Също така е много трудно да се поддържа, ако заместителите могат да се променят.

Както казах, само с дните от седмицата, вложен replace() изявленията са добри. Това всъщност не е "динамично". Ако делничните дни бяха само за илюстриране на проблема и всъщност трябва да се справяте с повече случаи или наистина динамични низове, бих обмислил различен подход. Намерете напълно динамични решения в този свързан отговор:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Настройване на Django с поддръжка на GeoDjango в AWS Beanstalk или EC2 инстанция

  2. Не може pg_restore на Heroku:не може да се прочете от входен файл:край на файла

  3. Вмъкване на валиден json с копие в таблицата на postgres

  4. Алтернативи на PGTune - ClusterControl PostgreSQL конфигурация

  5. Асоциациите в последователността не работят по предназначение