22/08/2018, 10:57

Điều kiện LIKE trong SQL Server

Điều kiện LIKE trong SQL Server (Transact-SQL) cho phép dùng wildcard (các kí hiệu đại diện) trong mệnh đề WHERE ở các lệnh SELECT, INSERT, UPDATE và DELETE, dùng để đối sánh mẫu. Cú pháp điều kiện LIKE “biểu thức” LIKE “mẫu” [ ESCAPE ...

Điều kiện LIKE trong SQL Server (Transact-SQL) cho phép dùng wildcard (các kí hiệu đại diện) trong mệnh đề WHERE ở các lệnh SELECT, INSERT, UPDATE và DELETE, dùng để đối sánh mẫu.

Cú pháp điều kiện LIKE

“biểu thức” LIKE “mẫu” [ ESCAPE ‘Escape_Character’ ]

Tên biến hoặc giá trị biến

biểu thức

Biểu thức kí tự như cột hoặc trường thông tin.

mẫu

BIểu thức kí tự có chứa đối chiếu mẫu. Các mẫu có thể chọn từ bảng dưới đây.

Kí hiệu đại diện Giải thích
% tìm chuỗi kí tự với bất kì độ dài nào (bao gồm cả độ dài 0)
_ tìm một kí tự
[^] tìm bất kì kí tự nào không chứa trong dấu [^] (ví dụ [^abc] sẽ tìm bất kì kí tự nào không phải là a, b hoặc c)

Escape Character

Tùy chọn. Tạm dịch là kí tự bỏ qua, cho phép kiểm tra xem kí tự đại diện như % hay _ có được dùng theo đúng nghĩa đen (dưới dạng hằng số), chứ không được dùng như một kí tự đặc biệt.

Ví dụ - dùng kí tự đại diện %

Dùng kí tự đại diện % trong điều kiện LIKE của SQL Server bằng ví dụ tìm những nhân viên có họ bắt đầu bằng chữ cái “B”

SELECT *
FROM nhanvien
WHERE ho LIKE ‘B%’;

Có thể dùng nhiều lần kí tự % trong cùng 1 chuỗi như ví dụ dưới đây.

SELECT * 
FROM nhanvien
WHER ho LIKE ‘%0%’;

Kết quả cho về các nhân viên mà trong họ có chứa chữ cái ‘o’.

Ví dụ - dùng kí tự đại diện _

Lưu ý là kí tự _ chỉ dùng để tìm kiếm 1 kí tự (độ dài bằng 1).

SELECT * 
FROM nhanvien
WHERE ho LIKE ‘Ad_m’;

Trong ví dụ này, kết quả trả về là các nhân viên có tên gồm 4 chữ cái, trong đó 2 chữ cái đầu là “Ad” và chữ cái cuối là “m”. Ví dụ như Adam, Adem, Adim, Adom…

Đây là một ví dụ khác

SELECT * 
FROM nhanvien
WHERE so_nhanvien LIKE ‘123_’;

Bạn đang tìm số nhân viên mà chỉ có 3 trong 4 chữ số. Ở ví dụ trên, kết quả trả về gồm 10 bản ghi, các giá trị thiếu nằm từ 0 tới 9: 1230, 1231, 1232…

Ví dụ - dùng kí tự đại diện []

Lưu ý là những gì nằm trong dấu ngoặc vuông là các kí tự mà bạn đang muốn và khớp với mẫu.

SELECT * 
FROM nhanvien
WHERE ten LIKE ‘Sm[iy]th’;

Kết quả trả về trong ví dụ này là các nhân viên mà tên có 5 chữ cái, trong đó 2 chữ cái đầu là “Sm” và 2 chữ cái cuối là “th”, chữ cái ở giữa có thể là “i” hoặc “y”. Vậy kết quả có thể là Smith hoặc Smyth.

Ví dụ - dùng kí tự đại diện [^]

Những gì nằm trong dấu ngoặc vuông là những kí tự bạn không muốn khớp với mẫu.

SELECT * 
FROM nhanvien
WHERE ten LIKE ‘Smy[^iy]th’;

Kết quả là tên nhân viên có 5 chữ cái, trong đó 2 chữ đầu là “Sm”, 2 chữ cuối là “th” và chữ ở giữa không phải “i” cũng không phải “y”. Kết quả có thể là Smath, Smeth…

Ví dụ - dùng toán tử NOT

Đây là cách dùng toán tử NOT trong SQL Server với các kí tự đại diện. Bạn có thể tìm họ nhân viên không bắt đầu bằng chữ cái “B” bằng điều kiện LIKE.

SELECT *
FROM nhanvien
WHERE ho NOT LIKE ‘B%’;

Bằng cách đặt toán tử NOT trước điều kiện LIKE, bạn tìm được họ nhân viên không bắt đầu bằng “B”.

Ví dụ - dùng kí tự bỏ qua Escape Character

Việc dùng kí tự bỏ qua rất quan trọng khi đối chiếu mẫu, để tránh việc hiểu nhầm các kí tự đặc biệt khi ta muốn dùng nó như một giá trị hằng.

Ví dụ như bạn muốn tìm các kí tự a% hay a_ chẳng hạn.

Lưu ý là chỉ có thể định nghĩa kí tự bỏ qua bằng 1 kí tự (độ dài bằng 1).

SELECT *
FROM nhanvien
WHERE secret_hint LIKE ‘123!%455’ ESCAPE ‘!’;

Lệnh này sẽ trả về các nhân viên có secret_hint là 123%455. Kí tự % không còn được dùng với ý nghĩa trước đó mà như một kí tự bình thường.

Đây là 1 ví dụ phức tạp hơn.

SELECT * 
FROM nhanvien
WHERE secret_hint LIKE ‘H%!%’ ESCAPE ‘!’;

Kết quả trả về của điều kiện LIKE là các nhân viên có secret_hint bắt đầu bằng “H” và kết thúc bằng “%”, ví dụ như “Help%”.

Có thể dùng kí tự bỏ qua với cả kí tự _ trong điều kiện LIKE.

SELECT * 
FROM nhanvien
WHERE secret_hint LIKE ‘H%!_’ ESCAPE ‘!’;

Ví dụ này trả về các nhân viên có secret_hint bắt đầu bằng “H” và kết thúc bằng “_”, ví dụ như “Help_”.

Bài trước: Điều kiện IS NOT NULL trong SQL Server

Bài tiếp: Điều kiện NOT trong SQL Server

0