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

Biểu thức chính quy trong mệnh đề LIKE của PostgreSQL

Giống như @a_horse đã nhận xét, bạn sẽ phải sử dụng toán tử biểu thức chính quy ~ để sử dụng các biểu thức dấu ngoặc.
Nhưng còn nhiều hơn thế. Tôi đề nghị:

SELECT *
FROM   tbl
WHERE  value ~ '^00[^0]'

^ ... khớp ở đầu chuỗi (biểu thức ban đầu của bạn có thể khớp ở bất kỳ vị trí).
[^0] ... một biểu thức trong ngoặc (lớp ký tự) khớp với bất kỳ ký tự không phải là 0 .

Hoặc tốt hơn , chưa:

SELECT *
FROM   tbl
WHERE  value LIKE '00%'       -- starting with '00'
AND    value NOT LIKE '000%'  -- third character is not '0'

Tại sao? LIKE không mạnh bằng, nhưng thường nhanh hơn các biểu thức chính quy. Về cơ bản, có lẽ nhanh hơn đáng kể để thu hẹp tập hợp các ứng cử viên với một LIKE rẻ tiền biểu thức.

Nói chung, bạn sẽ sử dụng NOT LIKE '__0' , nhưng vì chúng tôi đã thiết lập LIKE '00%' trong vị từ khác, chúng ta có thể sử dụng mẫu hẹp hơn (rẻ hơn) NOT LIKE '000' .

Postgres có thể sử dụng một chỉ mục btree đơn giản cho các biểu thức được neo bên trái value LIKE '00%' (quan trọng đối với các bảng lớn), trong khi điều đó có thể không hoạt động đối với một biểu thức chính quy phức tạp hơn. Phiên bản Postgres mới nhất có thể sử dụng chỉ mục cho các cụm từ thông dụng đơn giản, vì vậy nó có thể làm việc cho ví dụ này. Chi tiết:

  • Sự khác biệt giữa LIKE và ~ trong Postgres


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. loại bỏ các giá trị mảng trùng lặp trong postgres

  2. Trả về giá trị cột trước UPDATE chỉ bằng SQL

  3. Cách to_date () hoạt động trong PostgreSQL

  4. Tạo một số ngẫu nhiên trong phạm vi 1 - 10

  5. Nâng cấp cột varchar thành kiểu enum trong postgresql