Postgresql: Tìm kiếm với LIKE và ILIKE

24 tháng 07, 2018 - 13699 lượt xem

 

 

Tôi có 1 bảng actor lưu dữ liệu của các diễn viên điện ảnh với các cột:

  • actor_id PRIMARY KEY integer
  • first_name text
  • last_name text
  • last_update timestamp

 

Tôi muốn tìm tất cả các diễn viên có first_name là John --> tôi dùng lệnh WHERE với điều kiện first_name = 'John', easy and simple:

SELECT *
FROM actor
WHERE first_name = ‘John’

 

Nhưng, nếu như tôi muốn lấy tất các diễn viên có first_name chứa chữ 'John' ? Tôi không nhớ liệu diễn viên này có first_name là John hay Johnny hay Johnson ?

Trong những trường hợp như này, thay vì dùng operator '=', hãy dùng operator LIKE:

SELECT *
FROM actor
WHERE first_name LIKE ‘%John%’

 

trong đó dấu "%" đại diện cho 0 hoặc nhiều kí tự

 

Như vậy, ```first_name LIKE ‘%John%’``` có thể được hiểu là: first_name có (0 hoặc nhiều) kí tự đứng trước 'John' và có (0 hoặc nhiều) kí tự đứng sau 'John'. Nói cách khác, tất cả những first_name có chứa John

Ngoài operator '%', LIKE còn có thể hoạt động với operator '_':

SELECT *
FROM actor
WHERE first_name LIKE ‘Ale_’

 

Câu lệnh trên sẽ tìm tất cả các diễn viên có first_name bắt đầu với 'Ale', theo sau là duy nhất 1 kí tự bất kì

 

Thử kết hợp giữa '%' '_' phát nhể ?

SELECT *
FROM actor
WHERE first_name LIKE ‘_il%’

 

Hãy tìm cho tôi tất cả các diễn viên có first_name:

  • Chứa chữ 'il'
  • Trước chữ 'il' chỉ có duy nhất 1 kí tự
  • Sau chữ 'il' có bao nhiêu kí tự cũng được

 

Thế nếu như tôi muốn tìm kiếm không phân biệt hoa/thường ?

Hãy dùng ILIKE (I là viết tắt của case-Insensitive)

SELECT *
FROM actor
WHERE first_name ILIKE ‘%A%’
ORDER BY first_name

 

Hãy tìm cho tôi tất cả các diễn viên có first_name chứa chữ cái 'A', không cần biết đó là 'A' in hoa hay 'a' thường

 

Bình luận

avatar
Nguyễn Hàn Duy 2020-03-27 10:33:31.380677 +0000 UTC
+1
Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  +3 Thích
+3