PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Thay thế một chuỗi bằng một chuỗi khác từ danh sách tùy thuộc vào giá trị

Đối với một số loại trừ lẫn nhau thay thế, các câu lệnh thay thế lồng nhau là cách đơn giản và nhanh nhất. Chỉ cần như @Gordon đề xuất .

Nhưng điều đó không hiệu quả đối với nhiều thiết bị thay thế và có cạm bẫy :

Chuỗi con

Nó trở nên mơ hồ khi các chuỗi có thể là chuỗi con của nhau. Hãy xem xét hai biểu thức sau:

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

Kết quả phụ thuộc vào trình tự thay thế. Bạn phải xác định các ưu tiên. Thông thường, bạn sẽ thay thế các chuỗi dài hơn trước.

Chuỗi

Sau đó, cũng có khả năng rằng một sự thay thế có thể tạo ra một kết quả phù hợp cho phần tiếp theo:

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

Một lần nữa, bạn phải xác định các ưu tiên.
Mọi sự thay thế đều có thể ảnh hưởng đến việc thay thế tiếp theo. Với nhiều hơn một vài lần thay thế, điều này trở nên âm u và dễ xảy ra lỗi nhanh chóng. Cũng rất khó bảo trì nếu thay thế có thể thay đổi.

Như tôi đã nói, chỉ với các ngày trong tuần, replace() lồng nhau tuyên bố là tốt. Đó không thực sự là "động". Nếu các ngày trong tuần chỉ để minh họa vấn đề và bạn thực sự phải đối phó với nhiều trường hợp hơn hoặc các chuỗi thực sự động, tôi sẽ xem xét một cách tiếp cận khác. Tìm giải pháp động trong câu trả lời có liên quan này:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pip cài đặt không thành công với / usr / bin / clang:Không có tệp hoặc thư mục như vậy

  2. CHỌN hoặc CHÈN trong một hàm có khuynh hướng gặp phải các điều kiện về chủng tộc không?

  3. Thao tác CRUD chung Slick 2.0

  4. PostgreSQL MAX và GROUP BY

  5. Hiểu các loại ngày và chức năng của PostgreSQL (bằng các ví dụ)