Vấn đề:
Bạn có một cột chuỗi và bạn muốn lấy chuỗi con từ chúng.
Ví dụ 1:
Trong emails
bảng, có một cột email. Bạn muốn hiển thị bảy ký tự đầu tiên của mỗi email.
Bảng trông như sau:
[email protected] |
[email protected] |
[email protected] |
[email protected] |
Giải pháp 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
Kết quả là:
chuỗi con | |
---|---|
[email protected] | jake99 @ |
[email protected] | tamarab |
[email protected] | notine @ |
[email protected] | jessica |
Thảo luận:
Sử dụng SUBSTRING()
hàm số. Đối số đầu tiên là chuỗi hoặc tên cột. Đối số thứ hai là chỉ số của ký tự mà tại đó chuỗi con sẽ bắt đầu. Đối số thứ ba là độ dài của chuỗi con.
Coi chừng! Không giống như trong một số ngôn ngữ lập trình khác, chỉ mục bắt đầu từ 1 , không phải 0. Điều này có nghĩa là ký tự đầu tiên có chỉ số 1, ký tự thứ hai có chỉ số 2, v.v.
SUBSTRING(email, 1, 7)
sẽ trả về các chuỗi con của các giá trị trong email
cột bắt đầu bằng ký tự đầu tiên và có bảy ký tự.
Ví dụ 2:
Bạn muốn hiển thị chuỗi con giữa chỉ mục 2 và 6 (bao gồm).
Giải pháp 2:
SELECT email, SUBSTRING(email, 2, 5) AS substring FROM emails;
Kết quả là:
chuỗi con | |
---|---|
[email protected] | ake99 |
[email protected] | amara |
[email protected] | otine |
[email protected] | essic |
Thảo luận:
Bạn sử dụng SUBSTRING()
hoạt động giống như trong các ví dụ trước. Lần này, đối số thứ hai của hàm là 2
, vì chúng tôi muốn bắt đầu ở chỉ mục 2. Độ dài của chuỗi con là 5 (end_index - start_index + 1
).
Ví dụ 3:
Bạn muốn hiển thị chuỗi con bắt đầu tại @
ký và kết thúc ở cuối chuỗi, nhưng bạn không biết chỉ mục hoặc độ dài chính xác.
Giải pháp 3:
SELECT email, SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', email) + 1) AS substring FROM emails;
Kết quả là:
chuỗi con | |
---|---|
[email protected] | @ gmail.com |
[email protected] | @ zoho.com |
[email protected] | @ yahoo.fr |
[email protected] | @ onet.pl |
Thảo luận:
Bạn sử dụng SUBSTRING()
hoạt động giống như trong các ví dụ trước. Lần này, bạn đang tìm kiếm một nhân vật cụ thể có vị trí có thể thay đổi theo từng hàng. Để tìm chỉ mục của ký tự cụ thể, bạn có thể sử dụng CHARINDEX(character, column)
hàm trong đó ký tự là ký tự cụ thể mà bạn muốn bắt đầu chuỗi con (tại đây, @
). Cột đối số là cột mà bạn muốn truy xuất chuỗi con từ đó; nó cũng có thể là một chuỗi ký tự.
Đối số thứ ba của SUBSTRING()
hàm là độ dài của chuỗi con. Bạn có thể tính toán nó bằng cách sử dụng CHARINDEX()
và LEN()
chức năng. Bạn thực hiện việc này bằng cách trừ chỉ số khỏi độ dài cột, sau đó thêm 1:
LEN(email) - CHARINDEX('@', email) + 1
Bạn cũng có thể muốn truy xuất một chuỗi con không kết thúc ở cuối chuỗi nhưng ở một số ký tự cụ thể, ví dụ:trước '.
'. Đây là cách bạn có thể làm điều này:
SELECT email, SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', email)) AS substring FROM emails;
Kết quả của truy vấn này là:
chuỗi con | |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
Phần CHARINDEX('.', email) - CHARINDEX('@', email)
chỉ cần tính độ dài của chuỗi con.