Điều kiện LIKE trong SQL Server

Like SQL Server là gì? Cách dùng like trong SQL Server như thế nào? Hãy cùng Quantrimang.com tìm hiểu nhé!

Lập trình là một trong số ngành nghề được săn đón nhất hiện nay bởi công nghệ ngày càng phát triển, thì càng cần những kỹ sư lập trình giỏi. Chính vì thế, bộ môn này hiện đã được đưa vào giáo dục ngay từ cấp bậc tiểu học.

Thực sự lập trình là một môn học khó, tuy nhiên, nếu bạn nghiêm túc theo đuổi ngành này thì có lẽ đó không phải vấn đề. Hiện bạn có rất nhiều cách để học lập trình, từ tham gia một khóa học trực tiếp tới online hoặc tự học tại nhà.

Lập trình hiện có nhiều ngôn ngữ và cách quản trị cơ sở dữ liệu khác nhau. Nếu học lập trình, nhất định bạn phải biết cách dùng SQL Server. Về cơ bản, nó cũng bao gồm các lệnh và điều kiện. Ở bài viết này, chúng ta sẽ cùng nhau tìm hiểu hàm LIKE trong SQL Server.

SQL Server “LIKE” là một toán tử logic xác định một chuỗi ký tự có khớp với mẫu được chỉ định hay không. Một mẫu có thể bao gồm các ký tự thông thường và ký tự đại diện. Toán tử LIKE được dùng trong mệnh đề WHERE của lệnh SELECT, UPDATE và DELETE để lọc các hàng dựa trên cách viết kết hợp mẫu.

Đ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ệnGiả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_”.

Ví dụ về toán tử NOT LIKE trong SQL Server

Ví dụ sau sử dụng toán tử NOT LIKE để tìm khách hàng tại nơi ký tự đầu tiên trong tên gọi không phải chữ cái A:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    first_name NOT LIKE 'A%'
ORDER BY
    first_name;

Điểu cần ghi nhớ khi dùng LIKE trong SQL Server

Khi bạn thực hiện so sánh chuỗi bằng cách sử dụng LIKE, tất cả các ký tự trong chuỗi mẫu đều có ý nghĩa. Những ký tự quan trọng bao gồm mọi khoảng trắng ở đầu hoặc ở cuối. Nếu phép so sánh trong truy vấn trả về tất cả các hàng có chuỗi LIKE 'abc ' (abc theo sau là một khoảng trắng), thì một hàng trong đó với giá trị cột là abc (abc không có khoảng trắng) sẽ không được trả về. Tuy nhiên, các khoảng trống ở cuối, trong biểu thức phù hợp với mẫu, sẽ bị bỏ qua. Nếu phép so sánh trong truy vấn trả về tất cả các hàng có chuỗi LIKE 'abc' (abc không có khoảng trắng), thì tất cả các hàng bắt đầu bằng abc và không có hoặc nhiều khoảng trống ở cuối sẽ được trả về.

Một so sánh chuỗi sử dụng mẫu chứa dữ liệu char và varchar có thể không vượt qua so sánh LIKE do cách lưu trữ dữ liệu cho từng loại dữ liệu. Ví dụ khi chuyển một biến char cục bộ sang một thủ tục được lưu trữ, sau đó sử dụng khớp mẫu để tìm tất cả nhân viên có tên họ bắt đầu bằng bộ ký tự đã chỉ định.

Code ví dụ:

-- Uses AdventureWorks

CREATE PROCEDURE FindEmployee @EmpLName CHAR(20)
AS
SELECT @EmpLName = RTRIM(@EmpLName) + '%';

SELECT p.FirstName,
    p.LastName,
    a.City
FROM Person.Person p
INNER JOIN Person.Address a
    ON p.BusinessEntityID = a.AddressID
WHERE p.LastName LIKE @EmpLName;
GO

EXEC FindEmployee @EmpLName = 'Barb';
GO

Trong thủ tục FindEmployee, không có hàng nào được trả về vì biến char (@EmpLName) chứa khoảng trống ở cuối mỗi khi tên chứa ít hơn 20 ký tự. Vì cột Lastname là varchar nên không có khoảng trống ở cuối. Quy trình này không thành công do khoảng trống ở cuối quan trọng.

Tuy nhiên, ví dụ sau thành công vì khoảng trống ở dưới không được thêm vào biến varchar:

-- Uses AdventureWorks
  
CREATE PROCEDURE FindEmployee @EmpLName VARCHAR(20)
AS
SELECT @EmpLName = RTRIM(@EmpLName) + '%';

SELECT p.FirstName,
    p.LastName,
    a.City
FROM Person.Person p
INNER JOIN Person.Address a
    ON p.BusinessEntityID = a.AddressID
WHERE p.LastName LIKE @EmpLName;
GO

EXEC FindEmployee @EmpLName = 'Barb';
GO

Kết quả:

Hướng dẫn dùng LIKE trong SQL Server

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

Thứ Ba, 12/09/2023 16:53
3,812 👨 133.048
0 Bình luận
Sắp xếp theo
    ❖ SQL Server