HƯỚNG DẪN SỬ DỤNG HÀM CHARINDEX TRONG SQL SERVER
Hàm CHARINDEX trong SQL Server được sử dụng để tìm kiếm vị trí của một chuỗi ký tự nằm bên trong một chuỗi ký tự nào đó, giống như chúng ta dùng hàm FIND/SEARCH ở trong Excel. Hàm trả về kết quả là vị trí chuỗi con được tìm thấy.
CÚ PHÁP HÀM CHARINDEX
Để chạy hàm CHARINDEX trong SQL Server, ta sử dụng cú pháp như sau:
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
Tham số:
- expressionToFind
Chuỗi ký tự mà bạn muốn tìm kiếm. expressionToFind có giới hạn là 8000 ký tự - expressionToSearch
Chuỗi ký tự để tìm kiếm , có thể là một chuỗi chữ, biểu thức hoặc cột - start_location
Một số nguyên dạng integer hoặc bigint chỉ định vị trí trong chuỗi nơi bắt đầu việc tìm kiếm. Nếu start_location không được chỉ định, hoặc có giá trị âm, hoặc số 0, việc tìm kiếm sẽ bắt đầu từ ký tự đầu tiên của chuỗi expressionToSearch.
Kiểu dữ liệu trả về
bigint nếu expressionToSearch có kiểu dữ liệu là nvarchar(max), varbinary(max), hoặc varchar(max) ; còn lại trả về kiểu int.
Lưu ý
Nếu biểu thức expressionToFind hoặc biểu thức expressionToSearch có kiểu dữ liệu Unicode (nchar hoặc nvarchar) và biểu thức khác không có, thì hàm CHARINDEX sẽ chuyển đổi biểu thức khác đó thành kiểu dữ liệu Unicode. CHARINDEX không thể được sử dụng với các kiểu dữ liệu hình ảnh, ntext hoặc văn bản.
Nếu biểu thức expressionToFind hoặc biểu thức expressionToSearch có giá trị NULL, CHARINDEX trả về NULL.
Nếu CHARINDEX không tìm thấy biểu thứcToFind trong biểu thức Tìm kiếm, CHARINDEX trả về 0.
CHARINDEX thực hiện so sánh dựa trên đối chiếu đầu vào. Để thực hiện so sánh trong một đối chiếu được chỉ định, hãy sử dụng COLLATE để áp dụng đối chiếu rõ ràng cho đầu vào.
Vị trí bắt đầu được trả về là dựa trên 1, không dựa trên 0.
0x0000 (char (0)) là một ký tự không xác định trong các ảnh ghép Windows và không thể được đưa vào CHARINDEX.
Ví dụ sử dụng hàm CHARINDEX
Ví dụ 1: Trả về vị trí bắt đầu của một chuỗi
Ví dụ sau đây tìm kiếm từ bicycle trong chuỗi ký tự được đặt trong biến @document.
DECLARE @document VARCHAR(64); SELECT @document = ‘Reflectors are vital safety’ + ‘ components of your bicycle.’; SELECT CHARINDEX(‘bicycle’, @document); GO
Kết quả là 48
Ví dụ 2: Tìm kiếm từ một vị trí nhất định
Ví dụ dưới đây sử dụng tham số tùy chọn start_location để bắt đầu tìm kiếm từ khóa vital tại vị trí bắt đầu từ vị trí thứ 5 trong chuỗi cần tìm tại biến @document
DECLARE @document VARCHAR(64); SELECT @document = ‘Reflectors are vital safety’ + ‘ components of your bicycle.’; SELECT CHARINDEX(‘vital’, @document, 5); GO
Kết quả là 16
Ví dụ 3: Tìm kiếm một chuỗi không tồn tại
Ví dụ dưới đây hiển thị kết quả khi hàm CHARINDEX không tìm thấy chuỗi con expressionToFind trong chuỗi cha expressionToSearch.
SQL
DECLARE @document VARCHAR(64); SELECT @document = ‘Reflectors are vital safety’ + ‘ components of your bicycle.’; SELECT CHARINDEX(‘bike’, @document); GO
Kết quả là: 0
Ví dụ 4: Thực hiện tìm kiếm phân biệt chữ hoa và chữ thường case-sensitive search
Ví dụ sau sẽ thực hiện tìm kiếm phân biệt chữ hoa và chữ thường case-sensitive search để tìm từ TEST trong chuỗi ‘This is a Test“’.
USE tempdb; GO –perform a case sensitive search SELECT CHARINDEX ( ‘TEST’, ‘This is a Test’ COLLATE Latin1_General_CS_AS);
Kết quả là 0
Ví dụ sau sẽ thực hiện tìm kiếm phân biệt chữ hoa và chữ thường case-sensitive search để tìm từ Test trong chuỗi ‘This is a Test“’.
USE tempdb; GO SELECT CHARINDEX ( ‘Test’, ‘This is a Test’ COLLATE Latin1_General_CS_AS);
Kết quả là 11
Ví dụ 5: Thực hiện tìm kiếm không phân biệt chữ hoa, chữ thường case-insensitive search
Ví dụ sau sẽ thực hiện tìm kiếm không phân biệt chữ hoa và chữ thường case-insensitive search để tìm từ TEST trong chuỗi ‘This is a Test“’.
Theo mặc định của hệ thống:
SELECT CHARINDEX ( ‘TEST’,
‘This is a Test’)
Hoặc chỉ rõ COLLATE SELECT CHARINDEX ( ‘TEST’, ‘This is a Test’ COLLATE Latin1_General_CI_AS);
Kết quả là 11
Bài viết này là một phần trong Series “Học SQL xử lý, phân tích dữ liệu cùng chuyên gia MasterMOS”. Bạn hãy vào click vào link để xem toàn bộ Series bài viết, dễ dàng làm chủ SQL để xử lý, phân tích dữ liệu lớn cùng chúng tôi nhé.