Phương thức Substring() trong SQL Server: Cách sử dụng kèm ví dụ.

⚡ Tóm tắt thông minh

Ví dụ về phương thức SUBSTRING() trong SQL Server.tracts là một phần của ký tự, văn bản hoặc biểu thức nhị phân, trả về một số ký tự nhất định từ vị trí bắt đầu đã chọn, và kết hợp tự nhiên với CHARINDEX để phân tích cú pháp dựa trên dấu phân cách.

  • ✂️ Mục đích: Phương thức SUBSTRING() trả về một phần cụ thể của chuỗi, dựa trên biểu thức nguồn, vị trí bắt đầu và độ dài.
  • 🔢 Ba luận điểm: Biểu thức, vị trí bắt đầu và tổng độ dài đều là các tham số bắt buộc trong hàm SUBSTRING() của SQL Server.
  • 📍 Chỉ số dựa trên cơ số 1: Vị trí bắt đầu được tính từ 1, vì vậy ký tự đầu tiên được tính là vị trí thứ nhất, giúp tránh lỗi sai lệch một đơn vị.
  • 🔎 Với CHARINDEX: Việc kết hợp SUBSTRING() với CHARINDEX() giúp xác định vị trí dấu phân cách và loại bỏ dấu phân cách.tracĐó là đoạn văn bản trước hoặc sau nó.
  • ↔️ So với bên TRÁI và bên PHẢI: Không giống như LEFT() và RIGHT(), SUBSTRING() ví dụtracCác ký tự ts có thể xuất hiện ở bất kỳ vị trí nào, không chỉ ở hai đầu.
  • ⚠️ Các trường hợp ngoại lệ: Độ dài NULL sẽ trả về NULL, trong khi độ dài vượt quá chuỗi sẽ trả về phần dư mà không báo lỗi.

Hàm SUBSTRING() trong SQL Server với các ví dụ T-SQL

Chuỗi con() là gì?

SUBSTRING() là một hàm trong SQL Cho phép người dùng trích xuất một chuỗi con từ bất kỳ chuỗi nào được cung cấp theo nhu cầu. Ví dụ: SUBSTRING()tracSUBSTRING() là một chuỗi có độ dài xác định, bắt đầu từ một vị trí nhất định trong chuỗi đầu vào. Mục đích của SUBSTRING() trong SQL là trả về một phần cụ thể của chuỗi.

Cú pháp cho chuỗi con()

SUBSTRING(Expression, Starting Position, Total Length)

Đây:

  • Biểu thức SUBSTRING() trong SQL server Có thể là bất kỳ ký tự, chuỗi nhị phân, văn bản hoặc hình ảnh nào. Biểu thức là chuỗi nguồn mà từ đó chuỗi con được lấy ra.
  • Vị trí bắt đầu xác định vị trí trong biểu thức mà từ đó chuỗi con mới sẽ bắt đầu.
  • Tổng chiều dài là tổng chiều dài dự kiến ​​của chuỗi con kết quả từ Biểu thức, bắt đầu từ Vị trí bắt đầu.

Quy tắc sử dụng SUBSTRING()

  • Cả ba tham số đều bắt buộc trong hàm SUBSTRING() của MS SQL.
  • Nếu vị trí bắt đầu lớn hơn số ký tự tối đa trong biểu thức, thì hàm SUBSTRING() trong SQL Server sẽ không trả về giá trị nào.
  • Tổng chiều dài có thể vượt quá chiều dài ký tự tối đa của chuỗi gốc. Trong trường hợp này, chuỗi con kết quả là toàn bộ chuỗi, bắt đầu từ vị trí bắt đầu trong biểu thức cho đến ký tự cuối cùng của biểu thức.

Sơ đồ dưới đây minh họa cách sử dụng hàm SUBSTRING() trong SQL Server:

Sơ đồ minh họa cách sử dụng hàm SUBSTRING()tracts ký tự từ vị trí bắt đầu với độ dài nhất định

Ví dụ về chuỗi con T-SQL

Giả định: Giả sử chúng ta có một bảng tên là 'GuruBảng '99' với hai cột và bốn hàng, như hiển thị bên dưới. Chúng ta sẽ sử dụng bảng này.GuruBảng '99' trong các ví dụ sau:

GuruBảng mẫu số 99 với các cột Tutorial_ID và Tutorial_name được sử dụng trong các ví dụ về SUBSTRING.

Truy vấn 1: Hàm SUBSTRING() trong SQL có độ dài nhỏ hơn tổng độ dài tối đa của biểu thức.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;

Kết quả: Sơ đồ bên dưới hiển thị chuỗi con của cột 'Tutorial_name' dưới dạng cột 'SUB'. Vị trí bắt đầu là 1 và độ dài là 2, vì vậy hai ký tự đầu tiên được trả về:

Lưới kết quả trả về hai ký tự đầu tiên của Tutorial_name dưới dạng cột SUB.

Truy vấn 2: Hàm SUBSTRING() trong SQL Server có thể có độ dài lớn hơn tổng độ dài tối đa của biểu thức.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;

Kết quả: Sơ đồ bên dưới hiển thị chuỗi con của cột 'Tutorial_name' dưới dạng cột 'SUB'. Mặc dù độ dài chuỗi con lớn hơn tổng độ dài tối đa của biểu thức, nhưng không có lỗi nào được báo cáo và truy vấn trả về toàn bộ chuỗi từ vị trí bắt đầu trở đi:

Lưới kết quả trả về phần còn lại của Tutorial_name khi độ dài yêu cầu vượt quá chuỗi.

Truy vấn chuỗi con với chỉ mục ký tự trong SQL Server

Một ứng dụng thực tế rất phổ biến của SUBSTRING() là để...tracVăn bản nằm trước hoặc sau dấu phân cách, chẳng hạn như tên miền trong địa chỉ email. Bản thân hàm SUBSTRING() cần một vị trí bắt đầu cố định, nhưng vị trí của dấu phân cách thay đổi từ hàng này sang hàng khác. Hàm CHARINDEX() giải quyết vấn đề này bằng cách trả về vị trí của một ký tự bên trong chuỗi:

CHARINDEX(substring_to_find, expression [, start_location])

Bằng cách lồng CHARINDEX() bên trong SUBSTRING(), vị trí bắt đầu trở nên linh động. Ví dụ dưới đây tìm vị trí bắt đầu. @ ký hiệu và trả về mọi thứ sau nó. A biến Chứa giá trị mẫu:

DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com';
SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;

Ở đây, CHARINDEX('@', @Email) xác định vị trí của ký hiệu @, cộng thêm 1 sẽ di chuyển qua vị trí đó, và SUBSTRING() sau đó loại bỏtracts là các ký tự còn lại. Với giá trị ở trên, truy vấn trả về tên miền. guru99.comMẫu CHARINDEX-plus-SUBSTRING này là cách chuẩn để phân tích cú pháp các chuỗi có cấu trúc trong T-SQL.

So sánh giữa SUBSTRING và LEFT, RIGHT trong SQL Server

SQL Server cũng cung cấp các hàm LEFT() và RIGHT() để lấy ký tự từ đầu hoặc cuối chuỗi. Chúng ngắn gọn hơn khi viết, nhưng chỉ giới hạn ở hai đầu. Hàm SUBSTRING() linh hoạt nhất vì nó có thể bắt đầu ở bất kỳ vị trí nào. Bảng dưới đây so sánh chúng:

Chức năng Lập luận Extracts từ Tương đương với SUBSTRING()
LEFT(biểu thức, n) 2 Bắt đầu chuỗi CHUỖI CON(biểu thức, 1, n)
PHẢI (biểu thức, n) 2 Kết thúc chuỗi SUBSTRING(biểu thức, LEN(biểu thức) – n + 1, n)
CHUỖI CON(biểu thức, bắt đầu, độ dài) 3 Bất kỳ vị trí nào Không áp dụng

Tóm lại, LEFT() và RIGHT() là những phím tắt tiện lợi để xử lý các ký tự ở hai đầu chuỗi, trong khi SUBSTRING() xử lý trường hợp tổng quát, bao gồm cả các ký tự được lấy từ giữa chuỗi.

Các đối số âm, bằng không và NULL trong hàm SUBSTRING

Ngoài các quy tắc cơ bản, việc hiểu cách hoạt động của hàm SUBSTRING() ở các vị trí biên cũng rất hữu ích. Khi vị trí bắt đầu là 0 hoặc âm, SQL Server tính toán độ dài hiệu quả là (start + length – 1) và bắt đầu đọc từ vị trí thứ nhất. Khi bất kỳ đối số nào là NULL, kết quả sẽ là NULL. Bảng dưới đây đã được kiểm chứng so với bảng chính thức. SUBSTRING (Transact-SQL) Tài liệu tham khảo này trình bày các trường hợp sau:

Gọi số Kết quả Lý do
CHUỖI CON('Guru99', 1, 4) Guru Gọi thông thường: bốn ký tự từ vị trí thứ nhất.
CHUỖI CON('Guru99', 0, 3) Gu Bắt đầu từ dưới một: chiều dài hiệu dụng là 0 + 3 – 1 = 2.
CHUỖI CON('Guru99', 4, 100) u99 Nếu độ dài vượt quá chuỗi, hàm sẽ trả về phần dư mà không báo lỗi.
CHUỖI CON('Guru99', 3, NULL) NULL Đối số NULL làm cho toàn bộ kết quả trở thành NULL.

Việc nắm rõ các trường hợp ngoại lệ này giúp tránh những bất ngờ khi vị trí bắt đầu được tính toán từ một cột khác hoặc một... biến Giá trị đó có thể là 0 hoặc NULL.

Câu Hỏi Thường Gặp

SQL Server sử dụng SUBSTRING(); SUBSTR() là tên được sử dụng trong Oracle và MySQLCả hai đều trả về một phần của chuỗi, nhưng SUBSTRING() là hàm chuẩn của Transact-SQL, vì vậy SUBSTR() sẽ không chạy trên SQL Server.

Đúng vậy. Vì SUBSTRING() trả về một giá trị, nên nó có thể xuất hiện trong các mệnh đề WHERE, SELECT và ORDER BY. Việc lọc theo SUBSTRING() thường ngăn chặn việc tìm kiếm chỉ mục, vì vậy mẫu LIKE thường nhanh hơn đối với các tìm kiếm tiền tố.

Đúng vậy, nhưng SQL Server trước tiên sẽ chuyển đổi giá trị thành chuỗi, bằng cách ngầm định hoặc thông qua CAST hoặc CONVERT. Vị trí bắt đầu và độ dài sau đó sẽ đếm ký tự, không bao gồm chữ số hoặc phần ngày tháng, vì vậy hãy định dạng giá trị cẩn thận.

Dạng ba đối số hoạt động tương tự, nhưng chi tiết thì khác nhau. MySQL Ngoài ra, nó cũng cho phép sử dụng SUBSTR() và vị trí bắt đầu âm, trong khi SQL Server sử dụng SUBSTRING() và xử lý vị trí bắt đầu nhỏ hơn một bằng quy tắc độ dài hiệu quả.

Hàm SUBSTRING() trả về cùng loại với dữ liệu đầu vào: varchar cho dữ liệu ký tự, nvarchar cho văn bản Unicode và varbinary cho biểu thức nhị phân. Độ dài phụ thuộc vào chuỗi con được yêu cầu, chứ không phải toàn bộ cột nguồn.

Quấnping Một cột trong hàm SUBSTRING() bên trong mệnh đề WHERE làm cho điều kiện không thể tối ưu hóa (non-sargable), do đó SQL Server không thể sử dụng tìm kiếm chỉ mục trên cột đó. Đối với các kết quả khớp tiền tố, mẫu LIKE 'value%' thường cho hiệu quả tốt hơn.

Vâng. Trợ lý GitHub Có thể soạn thảo các biểu thức SUBSTRING() và CHARINDEX(), bao gồm cả phân tích cú pháp dựa trên dấu phân cách, từ lời nhắc bằng ngôn ngữ tự nhiên. Luôn luôn xác minh vị trí bắt đầu, độ dài và chỉ mục dựa trên 1 trước khi chạy truy vấn.

Các trợ lý AI và máy học dịch các quy tắc bằng tiếng Anh thông thường thành các tổ hợp SUBSTRING(), CHARINDEX(), LEFT() và RIGHT(), đề xuất các phép tính độ dài và báo lỗi sai lệch một đơn vị. Nhà phát triển xem xét tính chính xác của từng đề xuất trước khi triển khai.

Tóm tắt bài viết này với: