LIKE trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng toán tử LIKE trong SQL Server để kiểm tra xem chuỗi ký tự có khớp với mẫu đã chỉ định hay không.

Tổng quan về toán tử LIKE trong SQL Server

Toán tử LIKE trong SQL Server là một toán tử logic xác định xem một chuỗi ký tự có khớp với mẫu đã 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 sử dụng trong các mệnh đề WHERE của các câu lệnh SELECT, UPDATEDELETE để lọc các bảng ghi dựa trên biểu thức khởp mẫu.

Dưới đây minh họa cú pháp của toán tử LIKE trong SQL Server:


column | expression LIKE pattern [ESCAPE escape_character]

Pattern

Mẫu (pattern) là một chuỗi các ký tự để tìm kiếm trong cột hoặc biểu thức. Nó có thể bao gồm các ký tự đại diện hợp lệ sau:

  • Ký tự đại diện phần trăm (%): bất kỳ chuỗi nào có 0 hoặc nhiều ký tự.
  • Ký tự đại diện gạch dưới (_): bất kỳ ký tự đơn nào.
  • Ký tự đại diện [danh sách các ký tự]: bất kỳ ký tự đơn nào trong tập đã chỉ định.
  • [Ký tự-ký tự]: bất kỳ ký tự đơn nào trong phạm vi đã chỉ định.
  • [^]: Bất kỳ ký tự đơn nào không nằm trong danh sách hoặc phạm vi.

Các ký tự đại diện làm cho toán tử LIKE linh hoạt hơn các toán tử so sánh chuỗi bằng (=) và không bằng (!=).

ESCAPE

Ký tự thoát hướng dẫn toán tử LIKE xem các ký tự đại diện là các ký tự thông thường. Ký tự thoát không có giá trị mặc định và phải được ước lượng chỉ một ký tự.

Toán tử LIKE trả về TRUE nếu cột hoặc biểu thức khớp với mẫu được chỉ định.

Để phủ nhận kết quả của toán tử LIKE, bạn sử dụng toán tử NOT LIKE  như sau:


column | expression NOT LIKE pattern [ESCAPE escape_character]

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

Chúng tôi sẽ dụng bảng customers trong cơ sở dữ liệu mẫu để làm ví dụ cho toán tử LIKE trong SQL Server.

Bảng Customers trong cơ sở dữ liệu mẫu

Sử dụng toán tử LIKE với ký tự đại diện % trong SQL Server

Ví dụ sau đây tìm kiếm các khách hàng có họ bắt đầu bằng chữ cái Z:

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

Đây là kết quả:

Sử dụng toán tử LIKE với ký tự đại diện % trong SQL Server

Ví dụ sau đây trả về các khách hàng có họ kết thúc bằng chuỗi er:

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

Đây là kết quả:

Sử dụng toán tử LIKE với ký tự đại diện % trong SQL Server

Câu lệnh sau lấy ra các khách hàng có họ bắt đầu bằng chữ cái T và kết thúc bằng chữ cái s:

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

Đây là kết quả:

Sử dụng toán tử LIKE với ký tự đại diện % trong SQL Server

Sử dụng toán tử LIKE với ký tự đại diện _ trong SQL Server

Dấu gạch dưới (_) đại diện cho một ký tự duy nhất. Câu lệnh sau trả về khách hàng có họ chứa ký tự thứ hai là chữ cái u:

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

Đây là kết quả:

Sử dụng toán tử LIKE với ký tự đại diện _ trong SQL Server

Giải thích mẫu _u% trong ví dụ trên:

  • Ký tự gạch dưới đầu tiên (_) khớp với bất kỳ ký tự đơn nào.
  • Chữ cái thứ hai u khớp chính xác với chữ u.
  • Ký tự thứ ba % khớp với bất kỳ chuỗi ký tự nào.

Sử dụng toán tử LIKE với ký tự đại diện [danh sách các ký tự đại diện] trong SQL Server

Dấu ngoặc vuông ([]) với một danh sách các ký tự, ví dụ, [ABC] đại diện cho một ký tự phải là một trong các ký tự được chỉ định trong danh sách.

Ví dụ, truy vấn sau trả về những khách hàng  có họ bắt đầu bằng ký tự Y hoặc Z:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE '[YZ]%'
ORDER BY
    last_name;

Đây là kết quả:

Sử dụng toán tử LIKE với ký tự đại diện [danh sách các ký tự đại diện] trong SQL Server

Sử dụng toán tử LIKE với ký tự đại diện [phạm vi] trong SQL Server

Dấu ngoặc vuông với phạm vi ký tự, ví dụ: [A-C] đại diện cho một ký tự phải nằm trong phạm vi được chỉ định.

Ví dụ: truy vấn sau đây tìm kiếm các khách hàng có họ bắt đầu là các chữ cái nằm trong phạm vi từ chữ cái A đến chữ cái C:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE '[A-C]%'
ORDER BY
    first_name;

Đây là kết quả:

Sử dụng toán tử LIKE với ký tự đại diện [phạm vi] trong SQL Server

Sử dụng toán tử LIKE với ký tự đại diện [^phạm vi] trong SQL Server

Dấu ngoặc vuông với dấu mũ (^) theo sau là một phạm vi, ví dụ: [^A-C] hoặc danh sách ký tự, ví dụ: [ABC] đại diện cho một ký tự không có trong danh sách phạm vi hoặc danh sách ký tự được chỉ định.

Ví dụ: truy vấn sau đây trả về các khách hàng có họ không bắt đầu bằng các chữ cái trong phạm vi từ chữ cái A đến chữ cái X:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE '[^A-X]%'
ORDER BY
    last_name;

Đây là kết quả:

Sử dụng toán tử LIKE với ký tự đại diện [^phạm vi] trong SQL Server

Sử dụng toán tử NOT LIKE trong SQL Server

Ví dụ sau sử dụng toán tử NOT LIKE để tìm kiếm các khách hàng có tên không được bắt đầu bằng là chữ cái A:

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

Đây là kết quả:

Sử dụng toán tử NOT LIKE trong SQL Server

Sử dụng toán tử LIKE với ESCAPE trong SQL Server

Đầu tiên, chúng ta sẽ tạo một bảng mới cho ví dụ này:


CREATE TABLE sales.feedbacks (
    feedback_id INT IDENTITY(1, 1) PRIMARY KEY, 
    comment     VARCHAR(255) NOT NULL
);

Thứ hai, chèn một số bản ghi vào bảng sales.feedbacks:


INSERT INTO sales.feedbacks(comment)
VALUES('Can you give me 30% discount?'),
      ('May I get me 30USD off?'),
      ('Is this having 20% discount today?');

Thứ ba, truy vấn kiểm tra dữ liệu trong bảng sales.feedbacks:

SELECT 
    * 
FROM 
    sales.feedbacks;

Đây là kết quả:

Sử dụng toán tử LIKE với ESCAPE trong SQL Server

Nếu bạn muốn tìm kiếm những phản hồi có chuỗi 30% trong cột comment, bạn có thể viết một truy vấn như thế này:

SELECT 
   feedback_id,
   comment
FROM 
   sales.feedbacks
WHERE 
   comment LIKE '%30%';

Đây là kết quả:

Sử dụng toán tử LIKE với ESCAPE trong SQL Server

Truy vấn trả về các phản hồi có cột comment chứa chuỗi 30% và 30USD, đây không phải là điều chúng tôi mong đợi.

Để giải quyết vấn đề này, bạn cần sử dụng mệnh đề ESCAPE:

SELECT 
   feedback_id, 
   comment
FROM 
   sales.feedbacks
WHERE 
   comment LIKE '%30!%%' ESCAPE '!';

Đây là kết quả:

Sử dụng toán tử LIKE với ESCAPE trong SQL Server

Trong truy vấn này mệnh đề ESCAPE chỉ định rằng ký tự ! là ký tự thoát. Nó hướng dẫn toán tử LIKE coi ký tự % là một chuỗi ký tự thông thường thay vì ký tự đại diện.

Lưu ý: nếu không có mệnh đề ESCAPE, truy vấn sẽ trả về một tập kết quả trống.

Trong hướng dẫn này, bạn đã học cách sử dụng toán tử LIKE trong SQL Server để kiểm tra xem một chuỗi ký tự có khớp với mẫu đã chỉ định hay không.

SQL Server
Bài Viết Liên Quan:
INTERSECT trong SQL Server
Trung Nguyen 22/11/2020
INTERSECT trong SQL Server

Tìm hiểu cách sử dụng toán tử INTERSECT trong SQL Server để trả về phần giao nhau của các tập kết quả của hai truy vấn.

EXCEPT trong SQL Server
Trung Nguyen 22/11/2020
EXCEPT trong SQL Server

Tìm hiểu cách sử dụng EXCEPT trong SQL Server để loại trừ tập kết quả của một truy vấn ra khỏi tập kết quả của một truy vấn khác.

SQL Server: Hướng dẫn subquery trong SQL Server từ A-Z
Trung Nguyen 22/11/2020
SQL Server: Hướng dẫn subquery trong SQL Server từ A-Z

Tìm hiểu về subquery, toán tử EXISTS, ANY, ALL trong SQL Server và cách sử dụng truy vấn con để truy vấn dữ liệu.

UNION trong SQL Server
Trung Nguyen 22/11/2020
UNION trong SQL Server

Tìm hiểu cách sử dụng UNION trong SQL Server để kết hợp kết quả của hai hoặc nhiều truy vấn thành một tập kết quả duy nhất.