Trong SQL Server, bạn có thể sử dụng T-SQL CHARINDEX()
hàm để tìm vị trí bắt đầu của một biểu thức ký tự trong một biểu thức ký tự khác.
Bạn cung cấp cả hai biểu thức ký tự làm đối số. Bạn cũng có thể cung cấp một đối số tùy chọn để chỉ định một vị trí để bắt đầu tìm kiếm.
Cú pháp
Cú pháp như sau:
CHARINDEX (expressionToFind, expressionToSearch [, start_location])
Ở đâu expressionToFind là biểu thức bạn muốn tìm trong chuỗi khác và expressionToSearch là chuỗi khác. start_location tùy chọn có thể được sử dụng để chỉ định một vị trí trong expressionToSearch để bắt đầu tìm kiếm.
Lưu ý rằng chỉ vị trí của lần xuất hiện đầu tiên được trả về.
Ví dụ
Đây là một ví dụ:
SELECT CHARINDEX ('Bob', 'Bob thích bia. Bob cũng thích thịt bò.') AS Kết quả;
Kết quả:
+ ---------- + | Kết quả || ---------- || 1 | + ---------- +
Trong ví dụ này, đối số đầu tiên là Bob
, có nghĩa là chúng tôi đang tìm kiếm đối số thứ hai cho Bob
. Kết quả là 1 vì đó là vị trí mà Bob
xuất hiện đầu tiên trong đối số thứ hai.
Bạn cũng có thể nhận thấy rằng Bob
thực sự xuất hiện hai lần trong chuỗi, nhưng chỉ vị trí của kết quả khớp đầu tiên được trả về.
Không phù hợp
Nếu đối số thứ hai không chứa Bob
kết quả sẽ là 0
.
SELECT CHARINDEX ('Bob', 'Kate thích bia. Kate cũng thích thịt bò.') AS Kết quả;
Kết quả:
+ ---------- + | Kết quả || ---------- || 0 | + ---------- +
Chỉ định vị trí bắt đầu
Bạn có thể (tùy chọn) chỉ định vị trí bắt đầu cho tìm kiếm. Điều này có nghĩa là SQL Server sẽ bỏ qua bất kỳ sự kiện nào xảy ra trước vị trí bắt đầu đó. Tuy nhiên, kết quả vẫn được báo cáo dựa trên vị trí của nó trong toàn bộ chuỗi (không phải từ vị trí bắt đầu đã chọn của bạn).
Dưới đây là một ví dụ để chứng minh:
SELECT CHARINDEX ('Bob', 'Bob thích bia. Bob cũng thích thịt bò.', 16) AS Kết quả;
Kết quả:
+ ---------- + | Kết quả || ---------- || 17 | + ---------- +
Trong ví dụ này, chúng tôi bắt đầu tìm kiếm ở vị trí 16 (tình cờ là khoảng trắng trước Bob
thứ 2 ). Kết quả là lần xuất hiện đầu tiên của Bob
bị bỏ qua và vị trí của vị trí thứ hai được trả lại. Và chúng ta có thể thấy rằng vị trí của nó là 17 ký tự kể từ đầu chuỗi (mặc dù nó chỉ là một ký tự từ nơi chúng tôi bắt đầu tìm kiếm).
Phân biệt chữ hoa chữ thường
Bạn có thể thực hiện tìm kiếm phân biệt chữ hoa chữ thường một cách rõ ràng bằng cách thêm COLLATE
mệnh đề SELECT
của bạn tuyên bố:
Dưới đây là một ví dụ bao gồm tìm kiếm phân biệt chữ hoa chữ thường và không phân biệt chữ hoa chữ thường:
SELECT CHARINDEX ("Bia", "Bob thích bia." COLLATE Latin1_General_CS_AS) AS "Phân biệt chữ hoa chữ thường", CHARINDEX ("Bia", "Bob thích bia." COLLATE Latin1_General_CI_AS) AS "Phân biệt chữ hoa chữ thường";Kết quả:
+ ------------------ + -------------------- + | Phân biệt chữ hoa chữ thường | Không phân biệt chữ hoa chữ thường || ------------------ + -------------------- || 0 | 11 | + ------------------ + -------------------- +Cái đầu tiên phân biệt chữ hoa chữ thường vì
_CS
(trong đối chiếu) là viết tắt của Case-Sensitive. Cái thứ hai không phân biệt chữ hoa chữ thường vì_CI
là viết tắt của Phân biệt chữ hoa chữ thường.