Vấn đề:
Cách trích xuất một chuỗi con từ một chuỗi trong PostgreSQL / MySQL
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;
Cú pháp khác:
SELECT email, SUBSTRING(email FROM 1 FOR 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 cột email bắt đầu ở đầu các chuỗi (ký tự đầu tiên) và có bảy ký tự. Ký hiệu khác, SUBSTRING(email FROM 1 FOR 7)
, làm chính xác như vậy. Đối số sau FROM
là chỉ mục bắt đầu và là đối số sau FOR
là độ dài chuỗi con.
Đối số thứ ba của SUBSTRING()
chức năng là tùy chọn. Nếu bạn bỏ qua nó, bạn sẽ nhận được chuỗi con bắt đầu ở chỉ mục trong đối số thứ hai và đi đến cuối chuỗi. SUBSTRING(email, 1)
sẽ trả về toàn bộ chuỗi, giống như SUBSTRING(email FROM 1)
sẽ .
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;
Cú pháp khác:
SELECT email, SUBSTRING(email FROM POSITION('@' IN email)) 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 POSITION(character IN 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 column
từ đó bạn muốn truy xuất chuỗi con; nó cũng có thể là một chuỗi ký tự.
Nếu bạn muốn chuỗi con đi đến cuối chuỗi ban đầu, thì đối số thứ ba trong SUBSTRING()
hàm (hoặc FOR
đối số) là không cần thiết. Nếu không, nó phải là độ dài của chuỗi con hoặc bạn có thể tính toán nó bằng cách sử dụng POSITION()
hàm số. 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à một ví dụ:
SELECT email, SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring FROM emails;
Cú pháp khác:
SELECT email, SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN 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 POSITION('.' IN email) - POSITION('@' IN email)
chỉ cần tính độ dài của chuỗi con.