Trường hợp đơn giản của bạn có thể được giải quyết bằng một truy vấn đơn giản sử dụng ANY
cấu trúc và ~*
:
SELECT *
FROM tbl
WHERE col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));
~*
là toán tử đối sánh biểu thức chính quy không phân biệt chữ hoa chữ thường. Tôi sử dụng cái đó thay vì ILIKE
vì vậy chúng tôi có thể sử dụng các từ gốc trong chuỗi của bạn mà không cần phải chèn %
cho ILIKE
. Kết quả giống nhau - ngoại trừ các từ chứa các ký tự đặc biệt:%_\
cho ILIKE
và !$()*+.:<=>?[\]^{|}-
cho các mẫu biểu thức chính quy. Bạn có thể cần phải thoát các ký tự đặc biệt theo một trong hai cách để tránh bị bất ngờ. Đây là một hàm cho biểu thức chính quy:
- Hàm Escape cho biểu thức chính quy hoặc mẫu LIKE
Nhưng tôi có những nghi ngờ dai dẳng rằng đó sẽ là tất cả những gì bạn cần. Xem bình luận của tôi. Tôi nghi ngờ bạn cần Tìm kiếm toàn văn bản với từ điển phù hợp với ngôn ngữ tự nhiên của bạn để cung cấp nguồn gốc từ hữu ích ...
Có liên quan:
- Toán tử IN so với BẤT KỲ trong PostgreSQL
- Các biến thể hiệu suất truy vấn LIKE của PostgreSQL
- Đối sánh mẫu với LIKE, SIMILAR TO hoặc biểu thức chính quy trong PostgreSQL