PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Ganti string dengan string lain dari daftar tergantung pada nilainya

Untuk beberapa saling eksklusif penggantian, pernyataan ganti bersarang adalah cara paling sederhana dan tercepat. Cukup seperti yang disarankan @Gordon .

Tapi itu tidak skala baik untuk lebih dari beberapa penggantian dan ada jebakan :

Substring

Menjadi ambigu ketika string dapat menjadi substring satu sama lain. Perhatikan dua ungkapan berikut:

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

Hasilnya tergantung pada urutan penggantian. Anda harus menentukan prioritas. Biasanya Anda akan mengganti string yang lebih panjang terlebih dahulu.

Rantai

Kemudian ada juga kemungkinan bahwa satu pengganti dapat membuat kecocokan untuk yang berikutnya:

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

Sekali lagi, Anda harus menentukan prioritas.
Setiap penggantian mungkin mempengaruhi yang berikutnya. Dengan lebih dari beberapa penggantian, ini menjadi keruh dan rawan kesalahan dengan cepat. Juga sangat sulit untuk dirawat jika penggantian dapat berubah.

Seperti yang saya katakan, hanya dengan hari dalam seminggu, replace() . bersarang pernyataan baik-baik saja. Itu sebenarnya tidak "dinamis". Jika hari kerja hanya untuk menggambarkan masalah dan Anda benar-benar harus berurusan dengan lebih banyak kasus atau string yang benar-benar dinamis, saya akan mempertimbangkan pendekatan yang berbeda. Temukan solusi dinamis sepenuhnya dalam jawaban terkait ini:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. error dengan postgresql datababse :Apakah server berjalan secara lokal dan menerima koneksi pada soket domain Unix /var/run/postgresql/.s.PGSQL.5432?

  2. Postgresql tidak meminta kata sandi

  3. Formulir pencarian tidak merutekan ke pengontrol yang tepat di Rails 5.1

  4. Menyebarkan aplikasi Node/Sequelize ke heroku - Masalah dengan PORT

  5. Blokir SELECT sampai hasil tersedia