LIKE (Transact-SQL)

Bạn đang xem: sql giống như trong

LIKE (Transact-SQL)

Trong bài viết này

Áp dụng cho: SQL Server (tất cả các phiên bản được hỗ trợ) Cơ sở dữ liệu Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Hệ thống phân tích nền tảng (PDW)

Xác định xem một chuỗi ký tự cụ thể có khớp với một 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à các ký tự đại diện. Trong quá trình khớp mẫu, các ký tự thông thường phải khớp chính xác với các ký tự được chỉ định trong chuỗi ký tự. Tuy nhiên, các ký tự đại diện có thể được so khớp với các đoạn tùy ý của chuỗi ký tự. Sử dụng các ký tự đại diện làm cho toán tử LIKE linh hoạt hơn so với sử dụng các toán tử so sánh chuỗi = và! =. Nếu bất kỳ đối số nào không thuộc kiểu dữ liệu chuỗi ký tự, thì SQL Server Database Engine sẽ chuyển đổi nó thành kiểu dữ liệu chuỗi ký tự, nếu có thể.

Quy ước về cú pháp Transact-SQL

Cú pháp

  - Cú pháp cho SQL Server và Azure SQL Database
  
match_expression [NOT] LIKE mẫu [ESCAPE Escape_character]
 
  - Cú pháp cho Azure Synapse Analytics và Kho dữ liệu song song
  
match_expression [NOT] LIKE mẫu
 

Lưu ý

Hiện tại, ESCAPE và STRING_ESCAPE không được hỗ trợ trong Azure Synapse Analytics hoặc Hệ thống nền tảng Analytics (PDW).

Lưu ý

Để xem cú pháp Transact-SQL cho SQL Server 2014 trở về trước, hãy xem Tài liệu về các phiên bản trước .

Đối số

match_expression
Có phải bất kỳ biểu thức hợp lệ nào của kiểu dữ liệu ký tự không.

mẫu
Là chuỗi ký tự cụ thể để tìm kiếm trong match_expression và có thể bao gồm các ký tự đại diện hợp lệ sau. mẫu có thể có kích thước tối đa là 8.000 byte.

Ký tự đại diện
Sự mô tả
Thí dụ

%
Bất kỳ chuỗi nào không hoặc nhiều ký tự.
WHERE title LIKE ‘% computer%’ tìm tất cả các tên sách có từ ‘máy tính’ ở bất kỳ vị trí nào trong tên sách.

_ (gạch dưới)
Bất kỳ ký tự đơn lẻ nào.
WHERE au_fname LIKE ‘_ean’ tìm tất cả các tên gồm bốn chữ cái đầu kết thúc bằng ean (Dean, Sean, v.v.).

[]
Bất kỳ ký tự đơn nào trong phạm vi được chỉ định ([a-f]) hoặc tập hợp ([abcdef]).
WHERE au_lname LIKE ‘[C-P] arsen’ tìm họ của tác giả kết thúc bằng arsen và bắt đầu bằng bất kỳ ký tự đơn nào giữa C và P, ví dụ Carsen, Larsen, Karsen, v.v. Trong tìm kiếm theo phạm vi, các ký tự được bao gồm trong phạm vi có thể khác nhau tùy thuộc vào các quy tắc sắp xếp của đối chiếu.

[^]
Bất kỳ ký tự đơn lẻ nào không nằm trong phạm vi được chỉ định ([^ a-f]) hoặc tập hợp ([^ abcdef]).
WHERE au_lname LIKE ‘de [^ l]%’ tất cả họ của tác giả bắt đầu bằng de và trong đó chữ cái sau không phải là l.

Escape_character
Là một ký tự được đặt trước một ký tự đại diện để cho biết rằng ký tự đại diện được hiểu là một ký tự thông thường chứ không phải là một ký tự đại diện. Escape_character là một biểu thức ký tự không có mặc định và chỉ được đánh giá thành một ký tự.

Loại Kết quả

Boolean

Giá trị Kết quả

LIKE trả về TRUE nếu match_expression khớp với mẫu được chỉ định.

Nhận xét

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. Các ký tự quan trọng bao gồm bất kỳ khoảng trắng đầu hoặc cuối. Nếu phép so sánh trong một truy vấn trả về tất cả các hàng có chuỗi LIKE ‘abc’ (abc theo sau bởi một khoảng trắng), thì một hàng trong đó giá trị của 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 mà mẫu được đối sánh, 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 ô trống ở cuối sẽ được trả về.

Xem Thêm  Chỉ cho phép nhập số trong HTML - số loại đầu vào chỉ

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

 - Sử dụng AdventureWorks
  
TẠO THỦ TỤC Tìm nhân viên @EmpLName CHAR (20)
BẰNG 
CHỌN @EmpLName = RTRIM (@EmpLName) + '%';
CHỌN p.FirstName, p.LastName, a.City
FROM Person.Person p Tham gia Person.Address a ON p.BusinessEntityID = a.AddressID
WHERE p.LastName LIKE @EmpLName;
ĐI
EXEC FindEaffee @EmpLName = 'Barb';
ĐI
 

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

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

  - Sử dụng AdventureWorks
  
TẠO THỦ TỤC Tìm người lao động @EmpLName VARCHAR (20)
BẰNG 
CHỌN @EmpLName = RTRIM (@EmpLName) + '%';
CHỌN p.FirstName, p.LastName, a.City
FROM Person.Person p Tham gia Person.Address a ON p.BusinessEntityID = a.AddressID
WHERE p.LastName LIKE @EmpLName;
ĐI
EXEC FindEaffee @EmpLName = 'Barb';
 

Đây là tập hợp kết quả.

  FirstName LastName Thành phố
---------------------------------
Angela Barbariol Snohomish
David Barber Snohomish
(2 hàng bị ảnh hưởng)
 

Khớp mẫu bằng cách sử dụng LIKE

LIKE hỗ trợ đối sánh mẫu ASCII và đối sánh mẫu Unicode. Khi tất cả các đối số (biểu thức khớp, mẫu và ký tự mã thoát, nếu có) là kiểu dữ liệu ký tự ASCII, thì đối sánh mẫu ASCII được thực hiện. Nếu bất kỳ đối số nào thuộc kiểu dữ liệu Unicode, tất cả các đối số được chuyển đổi sang Unicode và đối sánh mẫu Unicode được thực hiện. Khi bạn sử dụng dữ liệu Unicode (kiểu dữ liệu nchar hoặc nvarchar ) với LIKE, các khoảng trống ở cuối là quan trọng; tuy nhiên, đối với dữ liệu không phải Unicode, các khoảng trống ở cuối không đáng kể. Unicode LIKE tương thích với tiêu chuẩn ISO. ASCII LIKE tương thích với các phiên bản SQL Server cũ hơn.

Sau đây là một loạt các ví dụ cho thấy sự khác biệt trong các hàng được trả về giữa đối sánh mẫu ASCII và Unicode LIKE.

  - Đối sánh mẫu ASCII với cột char
TẠO BẢNG T (col1 CHAR (30));
CHÈN VÀO CÁC GIÁ TRỊ ('Robert King');
LỰA CHỌN *
TỪ t
WHERE col1 LIKE '% King'; - trả về 1 hàng
  
- Đối sánh mẫu mã Unicode với cột nchar
TẠO BẢNG t (col1 NCHAR (30));
CHÈN VÀO CÁC GIÁ TRỊ ('Robert King');
LỰA CHỌN *
TỪ t
WHERE col1 LIKE '% King'; - không có hàng nào được trả lại
  
- Đối sánh mẫu mã Unicode với cột nchar và RTRIM
TẠO BẢNG t (col1 NCHAR (30));
CHÈN VÀO CÁC GIÁ TRỊ ('Robert King');
LỰA CHỌN *
TỪ t
WHERE RTRIM (col1) THÍCH '% King'; - trả về 1 hàng
 

Lưu ý

Các so sánh LIKE bị ảnh hưởng bởi đối chiếu. Để biết thêm thông tin, hãy xem COLLATE (Transact-SQL) .

Sử dụng% Ký tự đại diện

Nếu biểu tượng LIKE ‘5%’ được chỉ định, Công cụ Cơ sở dữ liệu sẽ tìm kiếm số 5 theo sau bởi bất kỳ chuỗi nào không hoặc nhiều ký tự.

Ví dụ: truy vấn sau đây hiển thị tất cả các chế độ xem quản lý động trong cơ sở dữ liệu AdventureWorks2012 vì tất cả chúng đều bắt đầu bằng các chữ cái dm .

  - Sử dụng AdventureWorks
  
CHỌN Tên
TỪ sys.system_views
WHERE Tên LIKE 'dm%';
ĐI
 

Để xem tất cả các đối tượng không phải là dạng xem quản lý động, hãy sử dụng KHÔNG THÍCH 'dm%' . Nếu bạn có tổng cộng 32 đối tượng và LIKE tìm thấy 13 tên phù hợp với mẫu, NOT LIKE sẽ tìm thấy 19 đối tượng không phù hợp với mẫu LIKE.

Không phải lúc nào bạn cũng có thể tìm thấy các tên giống nhau với mẫu chẳng hạn như LIKE '[^ d] [^ m]%' . Thay vì 19 tên, bạn chỉ có thể tìm thấy 14 tên, với tất cả các tên bắt đầu bằng d hoặc có m là chữ cái thứ hai bị loại khỏi kết quả và chế độ xem quản lý động những cái tên. Hành vi này là do các chuỗi khớp với các ký tự đại diện phủ định được đánh giá theo từng bước, một ký tự đại diện tại một thời điểm. Nếu trận đấu không thành công ở bất kỳ thời điểm nào trong quá trình đánh giá, trận đấu đó sẽ bị loại.

Xem Thêm  Vòng lặp trong JavaScript - câu lệnh lặp trong javascript

Sử dụng ký tự đại diện làm chữ

Bạn có thể sử dụng các ký tự đối sánh mẫu ký tự đại diện làm ký tự chữ. Để sử dụng ký tự đại diện làm ký tự chữ, hãy đặt ký tự đại diện trong dấu ngoặc. Bảng sau đây cho thấy một số ví dụ về việc sử dụng từ khóa LIKE và các ký tự đại diện [].

Biểu tượng
Nghĩa

THÍCH ‘5 [%]’
5%

THÍCH ‘[_] n’
_N

THÍCH ‘[a-cdf]’
a, b, c, d hoặc f

THÍCH ‘[-acdf]’
-, a, c, d hoặc f

GIỐNG ‘[ [ ]’
[

GIỐNG ‘]’
]

THÍCH ‘abc [_] d%’
abc_d và abc_de

THÍCH ‘abc [def]’
abcd, abce và abcf

Mẫu Khớp với Mệnh đề ESCAPE

Bạn có thể tìm kiếm các chuỗi ký tự bao gồm một hoặc nhiều ký tự đại diện đặc biệt. Ví dụ: bảng chiết khấu trong cơ sở dữ liệu khách hàng có thể lưu trữ các giá trị chiết khấu bao gồm dấu phần trăm (%). Để tìm kiếm dấu phần trăm dưới dạng một ký tự thay vì dưới dạng ký tự đại diện, từ khóa ESCAPE và ký tự thoát phải được cung cấp. Ví dụ, một cơ sở dữ liệu mẫu có chứa một cột có tên là chú thích chứa 30% văn bản. Để tìm kiếm bất kỳ hàng nào chứa chuỗi 30% ở bất kỳ vị trí nào trong cột nhận xét, hãy chỉ định mệnh đề WHERE chẳng hạn như WHERE nhận xét LIKE '% 30! %%' ESCAPE '!' . Nếu ESCAPE và ký tự thoát không được chỉ định, Công cụ Cơ sở dữ liệu trả về bất kỳ hàng nào có chuỗi 30!.

Nếu không có ký tự nào sau ký tự thoát trong mẫu LIKE, thì mẫu đó không hợp lệ và LIKE trả về FALSE. Nếu ký tự sau ký tự thoát không phải là ký tự đại diện, ký tự thoát sẽ bị loại bỏ và ký tự sau được coi là ký tự thông thường trong mẫu. Các ký tự này bao gồm dấu phần trăm (%), dấu gạch dưới (_) và ký tự đại diện trong ngoặc trái ([) khi chúng được đặt trong dấu ngoặc kép ([]). Các ký tự thoát có thể được sử dụng trong các ký tự trong ngoặc kép ([]), bao gồm để thoát dấu mũ (^), dấu gạch ngang (-) hoặc dấu ngoặc vuông phải (]).

0x0000 ( char (0) ) là một ký tự không xác định trong ảnh ghép Windows và không thể được đưa vào LIKE.

Ví dụ

A. Sử dụng LIKE với ký tự đại diện%

Ví dụ sau tìm tất cả các số điện thoại có mã vùng 415 trong bảng PersonPhone .

  - Sử dụng AdventureWorks
  
CHỌN p.FirstName, p.LastName, ph.PhoneNumber
FROM Person.Person Phone AS ph
NGƯỜI THAM GIA INNER. NGƯỜI NHƯ p
BẬT ph.BusinessEntityID = p.BusinessEntityID
WHERE ph.PhoneNumber LIKE '415%'
ĐẶT HÀNG bởi p.LastName;
ĐI
 

Đây là tập hợp kết quả.

  FirstName LastName Điện thoại
 ----------------- ----------------------------
 Ruben Alonso 415-555-124
 Shelby Cook 415-555-0121
 Karen Hu 415-555-0114
 John Long 415-555-0147
 David Long 415-555-0123
 Gilbert Ma 415-555-0138
 Meredith Moreno 415-555-0131
 Alexandra Nelson 415-555-0174
 Taylor Patterson 415-555-0170
 Gabrielle Russell 415-555-0197
 Dalton Simmons 415-555-0115
 (11 hàng bị ảnh hưởng)
 

B. Sử dụng NOT LIKE với ký tự đại diện%

Ví dụ sau tìm tất cả các số điện thoại trong bảng PersonPhone có mã vùng khác với 415 .

  - Sử dụng AdventureWorks
  
CHỌN p.FirstName, p.LastName, ph.PhoneNumber
FROM Person.Person Phone AS ph
NGƯỜI THAM GIA INNER. NGƯỜI NHƯ p
BẬT ph.BusinessEntityID = p.BusinessEntityID
WHERE ph.PhoneNumber KHÔNG THÍCH '415%' VÀ p.FirstName = 'Gail'
ĐẶT HÀNG THEO p.LastName;
ĐI
 

Đây là tập hợp kết quả.

  FirstName LastName Điện thoại
---------------------- ------------------------ -----------
Gail Alexander 1 (11) 500 555-0120
Gail Butler 1 (11) 500 555-0191
Gail Erickson 834-555-0132
Gail Erickson 849-555-0139
Gail Griffin 450-555-0171
Gail Moore 155-555-0169
Gail Russell 334-555-0170
Gail Westover 305-555-0100
(8 hàng bị ảnh hưởng)
 

C. Sử dụng mệnh đề ESCAPE

Ví dụ sau sử dụng mệnh đề ESCAPE và ký tự thoát để tìm chuỗi ký tự chính xác 10-15% trong cột c1 của Bảng mytbl2 .

 SỬ DỤNG tempdb;
ĐI
NẾU TỒN TẠI (CHỌN TABLE_NAME TỪ INFORMATION_SCHEMA.TABLES
      WHERE TABLE_NAME = 'mytbl2')
   DROP BẢNG mytbl2;
ĐI
SỬ DỤNG tempdb;
ĐI
TẠO BẢNG mytbl2
(
 c1 sysname
);
ĐI
INSERT mytbl2 VALUES ('Giảm giá 10-15%'), ('Giảm giá .10-.15');
ĐI
CHỌN c1
TỪ mytbl2
WHERE c1 LIKE '% 10-15!% Giảm%' ESCAPE '!';
ĐI
 

D. Sử dụng các ký tự đại diện []

Ví dụ sau tìm thấy các nhân viên trên bảng Person có tên đầu tiên là Cheryl hoặc Sheryl .

  - Sử dụng AdventureWorks
  
CHỌN BusinessEntityID, FirstName, LastName
TỪ Người. Người
NƠI FirstName LIKE '[CS] heryl';
ĐI
 

Ví dụ sau đây tìm các hàng cho nhân viên trong bảng Person có họ là Zheng hoặc Zhang .

  - Sử dụng AdventureWorks
  
CHỌN LastName, FirstName
TỪ Người. Người
ĐÂU LastName LIKE 'Zh [ae] ng'
ĐẶT HÀNG THEO LastName ASC, FirstName ASC;
ĐI
 

Ví dụ: Phân tích Azure Synapse và Hệ thống Nền tảng Analytics (PDW)

E. Sử dụng LIKE với ký tự đại diện%

Ví dụ sau tìm thấy tất cả nhân viên trong bảng DimEaffee có số điện thoại bắt đầu bằng 612 .

  - Sử dụng AdventureWorks
  
CHỌN FirstName, LastName, Phone
TỪ DimEaffee
WHERE điện thoại THÍCH '612%'
ĐẶT HÀNG bởi LastName;
 

F. Sử dụng NOT LIKE với ký tự đại diện%

Ví dụ sau tìm tất cả các số điện thoại trong bảng DimEaffee không bắt đầu bằng 612 . .

  - Sử dụng AdventureWorks
  
CHỌN FirstName, LastName, Phone
TỪ DimEaffee
Nơi điện thoại KHÔNG THÍCH '612%'
ĐẶT HÀNG bởi LastName;
 

G. Sử dụng LIKE với ký tự đại diện _

Ví dụ sau đây tìm tất cả các số điện thoại có mã vùng bắt đầu bằng 6 và kết thúc bằng 2 trong bảng DimErantyee . Ký tự đại diện% được bao gồm ở cuối mẫu tìm kiếm để khớp với tất cả các ký tự sau trong giá trị cột điện thoại.

  - Sử dụng AdventureWorks
  
CHỌN FirstName, LastName, Phone
TỪ DimEaffee
WHERE điện thoại THÍCH '6_2%'
ĐẶT HÀNG bởi LastName;
 

Xem thêm

PATINDEX (Giao dịch-SQL)
Biểu thức (Giao dịch-SQL)
Chức năng tích hợp (Transact-SQL)
CHỌN (Giao dịch-SQL)
WHERE (Giao dịch-SQL)

Xem Thêm  Cuối cùng! Hàng và cột trong CSS! - cột và hàng css


Xem thêm những thông tin liên quan đến chủ đề sql like with in

The LIKE operator in SQL

  • Tác giả: Database by Doug
  • Ngày đăng: 2016-05-21
  • Đánh giá: 4 ⭐ ( 2794 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: An introduction to using LIKE in the WHERE clause of your SQL SELECT statements. For beginners.

SQL LIKE Operator

  • Tác giả: www.w3schools.com
  • Đánh giá: 5 ⭐ ( 5091 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

SQL LIKE Operator

  • Tác giả: www.tutorialsteacher.com
  • Đánh giá: 3 ⭐ ( 7188 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: The LIKE operator is used in the WHERE condition to filter data based on some specific pattern. It can be used with numbers, string, or date values. However, it is recommended to use the string values.

Is there a combination of “LIKE” and “IN” in SQL?

  • Tác giả: stackoverflow.com
  • Đánh giá: 5 ⭐ ( 7275 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

SQL LIKE and NOT LIKE Operators (With Examples)

  • Tác giả: www.programiz.com
  • Đánh giá: 3 ⭐ ( 4827 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: The LIKE operator in SQL is used with the WHERE clause to check if a value matches a given string. In this tutorial, we’ll learn about the LIKE clause in SQL and how to use them with examples.

Using the IN, NOT, and LIKE Operators in SQL

  • Tác giả: www.universalclass.com
  • Đánh giá: 5 ⭐ ( 7620 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: The IN condition lets you set a list of values that must match values in your tables. The IN condition lists values in parenthesis, and its better than working with multiple OR conditions.

Like Operator with IN clause

  • Tác giả: asktom.oracle.com
  • Đánh giá: 4 ⭐ ( 2621 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Like Operator with IN clause I have to compare more than one Patter using LIKE operatorSay I want to prepare querySELECT nameFROM employeeWHERE name LIKE IN (‘sasho’,’shashi%’,’rags’)

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php