Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Cách trích xuất một chuỗi con từ một chuỗi trong T-SQL

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
[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à:

email 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à:

email 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à:

email 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()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à:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 30 câu hỏi phỏng vấn truy vấn SQL hàng đầu bạn phải thực hành vào năm 2022

  2. Các tính năng không được dùng nữa để đưa ra khỏi hộp công cụ của bạn - Phần 2

  3. Nhân bản cơ sở dữ liệu với PSDatabaseClone

  4. Kích hoạt trong SQL

  5. ALTER tốt hơn DROP