Cách sử dụng hàm CharIndex trong SQL Server để xử lý, phân tích dữ liệu

Cach su dung ham CharIndex trong SQL Server de xu ly, phan tich du lieu
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. Đây là một hàm cực kỳ quan trọng trong SQL Server để giúp chúng ta xử lý, phân tích dữ liệu với các bài toán nghiệp vụ liên quan đến tách chuỗi dữ liệu.
Chia sẻ bài viết này

Mục lục bài viết

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é.

Tham dự Nhóm thảo luận về Nghề Phân tích Dữ liệu tại https://www.fb.com/groups/ngheda

Tham dự Nhóm thảo luận về Tin học văn phòng tại https://www.fb.com/groups/mastermosvn

Tham dự Cộng đồng học viên MasterMOS tại https://www.fb.com/groups/congdonghocvienmastermos

Website MasterMOS : https://m.edu.vn  | Facebook: https://www.fb.com/NgocChienCN

Hotline/Zalo: 086 680 2624

Tác giả: Ngọc Chiến MasterMOS

  • Ngọc Chiến MasterMOS là chuyên gia đào tạo Phân tích dữ liệu và Tin học ứng dụng với các chứng chỉ Microsoft Technology Associate, Data Analyst Associate, MOS Master của Microsoft. Chi tiết chứng chỉ tại: https://m.edu.vn/ccgv

  • Anh có 12 năm kinh nghiệm trong lĩnh vực Digital Banking, Management Information System (MIS) – Business Intelligence (BI) – Data Analytics (DA) tại các ngân hàng, công ty hàng đầu Việt Nam.

  • Anh có kinh nghiệm đào tạo tại nhiều ngân hàng, công ty tài chính, chứng khoán, viễn thông lớn nhất Việt Nam với trên 80 lớp OFFLINE/ZOOM, và hàng nghìn học viên trên hệ thống ONLINE UB.NET. Chi tiết hình ảnh các lớp học tại link https://m.edu.vn/ahv

  • Các đơn vị tiêu biểu anh đã đào tạo: các ngân hàng VCB, MBB, LienVietPostBank, NCB, OCB,  công ty viễn thông Viettel Hà Nội, công ty tài chính MCredit, công ty chứng khoán SSI, công ty dược phẩm Delta…

  • Anh dày công xây dựng các khóa đào tạo để biến kiến thức tin học có tính kỹ thuật cao trở nên dễ tiếp thu. Anh được học viên yêu mến gọi là “Thầy dạy tin học ứng dụng dễ hiểu nhất Việt Nam“. Anh hiện là giám đốc MasterMOS Education.

ĐĂNG KÝ NHẬN THỦ THUẬT TIN HỌC
Chúng tôi sẽ gửi bạn Kiến thức cập nhật hàng tuần qua EMAIL/ZALO
Các bài viết liên quan

Cảm ơn bạn đã ghé thăm Website MasterMOS Education. Chúng tôi có quà tặng cho bạn, hãy đăng ký nhận nếu bạn thấy phù hợp nhé :)