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.
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:
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:
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ề:
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:
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.





