PostgreSQL - Mệnh đề LIKE
PostgreSQL LIKEtoán tử được sử dụng để so khớp các giá trị văn bản với một mẫu sử dụng ký tự đại diện. Nếu biểu thức tìm kiếm có thể được so khớp với biểu thức mẫu, toán tử LIKE sẽ trả về true, đó là1.
Có hai ký tự đại diện được sử dụng cùng với toán tử LIKE -
- Dấu phần trăm (%)
- Dấu gạch dưới (_)
Dấu phần trăm đại diện cho không, một hoặc nhiều số hoặc ký tự. Dấu gạch dưới thể hiện một số hoặc một ký tự. Các ký hiệu này có thể được sử dụng trong các tổ hợp.
Nếu một trong hai dấu này không được sử dụng cùng với mệnh đề LIKE, thì LIKE hoạt động giống như toán tử bằng.
Cú pháp
Cú pháp cơ bản của% và _ như sau:
SELECT FROM table_name
WHERE column LIKE 'XXXX%'
or
SELECT FROM table_name
WHERE column LIKE '%XXXX%'
or
SELECT FROM table_name
WHERE column LIKE 'XXXX_'
or
SELECT FROM table_name
WHERE column LIKE '_XXXX'
or
SELECT FROM table_name
WHERE column LIKE '_XXXX_'
Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử AND hoặc OR. Ở đây XXXX có thể là bất kỳ giá trị số hoặc chuỗi nào.
Thí dụ
Dưới đây là một số ví dụ cho thấy phần WHERE có mệnh đề LIKE khác nhau với các toán tử '%' và '_' -
S. Không. | Tuyên bố & Mô tả |
---|---|
1 | WHERE SALARY::text LIKE '200%' Tìm bất kỳ giá trị nào bắt đầu bằng 200 |
2 | WHERE SALARY::text LIKE '%200%' Tìm bất kỳ giá trị nào có 200 ở bất kỳ vị trí nào |
3 | WHERE SALARY::text LIKE '_00%' Tìm bất kỳ giá trị nào có 00 ở vị trí thứ hai và thứ ba |
4 | WHERE SALARY::text LIKE '2_%_%' Tìm bất kỳ giá trị nào bắt đầu bằng 2 và có độ dài ít nhất 3 ký tự |
5 | WHERE SALARY::text LIKE '%2' Tìm bất kỳ giá trị nào kết thúc bằng 2 |
6 | WHERE SALARY::text LIKE '_2%3' Tìm bất kỳ giá trị nào có 2 ở vị trí thứ hai và kết thúc bằng 3 |
7 | WHERE SALARY::text LIKE '2___3' Tìm bất kỳ giá trị nào trong một số có năm chữ số bắt đầu bằng 2 và kết thúc bằng 3 |
Postgres LIKE chỉ là so sánh chuỗi. Do đó, chúng ta cần chuyển cột số nguyên thành chuỗi một cách rõ ràng như trong các ví dụ trên.
Chúng ta hãy lấy một ví dụ thực tế, hãy xem xét bảng COMPANY , có các bản ghi như sau:
# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
Sau đây là một ví dụ, sẽ hiển thị tất cả các bản ghi từ bảng COMPANY trong đó AGE bắt đầu bằng 2 -
testdb=# SELECT * FROM COMPANY WHERE AGE::text LIKE '2%';
Điều này sẽ tạo ra kết quả sau:
id | name | age | address | salary
----+-------+-----+-------------+--------
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
8 | Paul | 24 | Houston | 20000
(7 rows)
Sau đây là một ví dụ, sẽ hiển thị tất cả các bản ghi từ bảng COMPANY trong đó ADDRESS sẽ có dấu gạch ngang (-) bên trong văn bản -
testdb=# SELECT * FROM COMPANY WHERE ADDRESS LIKE '%-%';
Điều này sẽ tạo ra kết quả sau:
id | name | age | address | salary
----+------+-----+-------------------------------------------+--------
4 | Mark | 25 | Rich-Mond | 65000
6 | Kim | 22 | South-Hall | 45000
(2 rows)