Nhiều RDBMS có INSTR()
hàm cho phép chúng tôi tìm một chuỗi con trong một chuỗi. Một số (chẳng hạn như MySQL và MariaDB) cũng có LOCATE()
và một POSITION()
(cũng được hỗ trợ bởi PostgreSQL), làm điều tương tự.
Máy chủ SQL không có INSTR()
hàm số. Nó cũng không có LOCATE()
hoặc POSITION()
hàm số. Nhưng nó có CHARINDEX()
hoạt động tương tự.
SQL Server cũng có PATINDEX()
, thực hiện một công việc tương tự với CHARINDEX()
.
CHARINDEX()
Chức năng
Đây là một ví dụ về CHARINDEX()
chức năng:
SELECT CHARINDEX('news', 'No news is good news');
Kết quả:
4
Hàm chấp nhận đối số thứ ba cho phép chúng tôi chỉ định nơi bắt đầu tìm kiếm:
SELECT CHARINDEX('news', 'No news is good news', 5);
Kết quả:
17
Trong ví dụ này, chúng tôi bắt đầu tìm kiếm ở vị trí 5, sau khi bắt đầu lần xuất hiện đầu tiên của news
, vì vậy nó trả về vị trí của lần xuất hiện thứ hai.
PATINDEX()
Chức năng
PATINDEX()
chức năng tương tự như CHARINDEX()
, ngoại trừ việc nó cho phép chúng tôi tìm kiếm một mẫu, thay vì một chuỗi cụ thể.
Dưới đây là một ví dụ để minh họa ý tôi muốn nói:
SELECT PATINDEX('%ew%', 'No news is good news');
Kết quả:
5
Đây là những gì sẽ xảy ra nếu tôi xóa các ký tự đại diện:
SELECT PATINDEX('ew', 'No news is good news');
Kết quả:
0
Xem PATINDEX()
so với CHARINDEX()
để biết thêm về sự khác biệt giữa hai chức năng này.