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

Thay vì LIKE và ~, tại sao chỉ SIMILAR TO hoạt động khi thực hiện kết hợp regex với các lựa chọn thay thế

LIKE hỗ trợ so khớp mẫu bằng _ cho bất kỳ ký tự đơn nào và % cho bất kỳ chuỗi ký tự nào như sau:

SELECT 'thomas' LIKE '%(h|x)%'

không hoạt động vì LIKE không hiểu (...) để phân nhóm hoặc | để thay thế, đó chỉ là các ký tự chữ trong mẫu LIKE.

SIMILAR TO hỗ trợ _% giống như LIKE nhưng thêm nhóm với (...) , xen kẽ với | và một số thứ khác như sau:

SELECT 'thomas' SIMILAR TO '%(h|x)%'

hoạt động như mong đợi.

~* sử dụng các biểu thức POSIX nên (...) là để nhóm và | là để thay thế nhưng % chỉ là một dấu phần trăm; điều đó có nghĩa là điều này:

SELECT 'thomas' ~* '%(h|x)%'

đang tìm kiếm một h hoặc x được bao quanh bởi các ký hiệu phần trăm và không hoạt động theo cách bạn mong đợi.

~* của bạn phiên bản sẽ hoạt động nếu bạn sử dụng regex thích hợp như:

SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x'   -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]'  -- or a character class

Tài liệu được liên kết ở trên bao gồm tất cả những điều 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. Cài đặt PostgreSQL trên Ubuntu 18.04

  2. PostgreSQL Chọn mục nhập gần đây nhất cho một ID nhất định

  3. Lỗi trong diễn biến trên Heroku

  4. Câu lệnh INSERT INTO có điều kiện trong postgres

  5. giá trị quá dài để ký tự loại thay đổi (N)