Tương tự như bài viết của tôi về lệnh SQL Server STUFF , hôm nay chúng ta sẽ kiểm tra lệnh máy chủ SQL SUBSTRING. Nó tương tự như lệnh STUFF liên quan đến các tham số mà nó chấp nhận.
Các tham số được SUBSTRING chấp nhận như sau:
SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH)
Lệnh SUBSTRING phổ biến trong hầu hết các cơ sở dữ liệu tiêu chuẩn chính như SQL Server, MySQL, Oracle và Postgres.
Hãy cùng khám phá hàm SUBSTRING với một số ví dụ.
Phần 1 - Ví dụ về SUBSTRING Đơn giản
Trong ví dụ đầu tiên này, giá trị chuỗi “ABC” sẽ được chuyển đến hàm SUBSTRING. Mỗi lệnh gọi sẽ có đối số vị trí bắt đầu tăng lên 1. Đối số độ dài sẽ giữ nguyên 1 cho mỗi lệnh gọi.
SELECT SUBSTRING('ABC',1,1); --RETURNS : A
SELECT SUBSTRING('ABC',2,1); --RETURNS : B
SELECT SUBSTRING('ABC',3,1); --RETURNS : C
Từ những ví dụ này, chúng ta có thể thấy chức năng chung của hàm SUBSTRING, mỗi gia số ở vị trí bắt đầu sẽ dịch chuyển chữ cái được trả về. Trong thực thi # 1 giá trị là A, # 2 giá trị là B và trong # 3 giá trị là C.
Một tính năng thú vị của hàm SUBSTRING là thông số độ dài không bị ngắt nếu nó vượt quá độ dài của giá trị bạn đang phân tích cú pháp. Ví dụ:giá trị “1000” có độ dài 4 chữ số. Nếu được phân tích cú pháp với truy vấn sau chỉ định độ dài là 6, hàm SUBSTRING trả về chuỗi ban đầu.
SELECT SUBSTRING('1000',1,6); --RETURNS : 1000
Phần 2 - Phân tích cú pháp Dữ liệu bằng Hàm SUBSTRING
Đối với ví dụ tiếp theo, giả sử rằng chúng tôi có cơ sở dữ liệu để lưu giữ dữ liệu về ô tô đã qua sử dụng. Tuy nhiên, thay vì sử dụng mô hình dữ liệu quan hệ nhiều bảng, cơ sở dữ liệu chỉ chứa khóa chính và SKU hoặc đơn vị lưu giữ kho. SKU này có thể được sử dụng để tìm nhiều trường xung quanh các tính năng của ô tô bằng cách sử dụng phím sau:
TOY-CEL-R-1990-150
-------------------------------------------------------
MAKE-MODEL-COLOR-YEAR-MILEAGE
* Trong các ví dụ này, số dặm được biểu thị ở tỷ lệ 1/1000, tức là 100 =100.000
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'CODESIGHT_DEMOS')
BEGIN
CREATE DATABASE CODESIGHT_DEMOS;
END;
GO
USE CODESIGHT_DEMOS;
IF OBJECT_ID('USEDCARS') IS NOT NULL DROP TABLE USEDCARS
CREATE TABLE USEDCARS
(
ID INT IDENTITY(1,1) PRIMARY KEY,
CAR_SKU VARCHAR(30)
)
--MAKE--MODEL--COLOR--YEAR--MILEAGE *1000
INSERT INTO USEDCARS
VALUES('TOY-CEL-R-1990-150')
INSERT INTO USEDCARS
VALUES('JEP-WRG-W-2019-15')
INSERT INTO USEDCARS
VALUES('FRD-ESC-G-1998-80')
SELECT * FROM USEDCARS
Đầu ra của bảng ô tô đã qua sử dụng là:
ID | CAR_SKU |
1 | ĐỒ CHƠI-CEL-R-1990-150 |
2 | JEP-WRG-W-2019-15 |
3 | FRD-ESC-G-1998-80 |
Bằng cách sử dụng hàm SUBSTRING, các giá trị này có thể được phân tích cú pháp bằng cách gán các thông số độ dài và vị trí bắt đầu chính xác cho trường CAR_SKU.
SELECT SUBSTRING(CAR_SKU,1,3) AS MAKE,
SUBSTRING(CAR_SKU,5,3) AS MODEL,
SUBSTRING(CAR_SKU,9,1) AS COLOR,
SUBSTRING(CAR_SKU,11,4) AS YEAR,
SUBSTRING(CAR_SKU,16,3) * 1000 AS MILEAGE
FROM USEDCARS;
MAKE | MÔ HÌNH | MÀU SẮC | NĂM | MILEAGE |
ĐỒ CHƠI | CEL | R | 1990 | 150000 |
JEP | WRG | W | 2019 | 15000 |
FRD | ESC | G | 1998 | 80000 |
Phần 3 - Tóm tắt Logic SQL SUBSTRING cho Chế độ xem
Sử dụng hàm SUBSTRING của SQL, chúng tôi có thể phân tích cú pháp các tính năng khác nhau của từng loại xe trong cơ sở dữ liệu của mình. Hãy tiến xa hơn 1 bước này và chuyển đầu ra đó thành dữ liệu có ý nghĩa hơn bằng cách xây dựng chế độ xem trên truy vấn SUBSTRING.
Trong mô hình dữ liệu quan hệ, điều này sẽ đạt được bằng cách sử dụng các phép nối kết hợp với câu lệnh CASE WHEN để dịch các giá trị.
CREATE VIEW VW_CAR_INVENTORY
AS
SELECT
CASE WHEN SUBSTRING(CAR_SKU,1,3) = 'TOY' THEN 'TOYOTA'
WHEN SUBSTRING(CAR_SKU,1,3) = 'JEP' THEN 'JEEP'
WHEN SUBSTRING(CAR_SKU,1,3) = 'FRD' THEN 'FORD'
END AS MAKE,
CASE WHEN SUBSTRING(CAR_SKU,5,3) = 'CEL' THEN 'CELICA'
WHEN SUBSTRING(CAR_SKU,5,3) = 'WRG' THEN 'WRANGLER'
WHEN SUBSTRING(CAR_SKU,5,3) = 'ESC' THEN 'ESCAPE'
END AS MODEL,
CASE WHEN SUBSTRING(CAR_SKU,9,1) = 'R' THEN 'RED'
WHEN SUBSTRING(CAR_SKU,9,1) = 'W' THEN 'WHITE'
WHEN SUBSTRING(CAR_SKU,9,1) = 'G' THEN 'GREEN'
END AS COLOR,
SUBSTRING(CAR_SKU,11,4) AS YEAR,
SUBSTRING(CAR_SKU,16,3) * 1000 AS MILEAGE
FROM USEDCARS
MAKE | MÔ HÌNH | MÀU SẮC | NĂM | MILEAGE |
TOYOTA | CELICA | ĐỎ | 1990 | 150000 |
JEEP | WRANGLER | TRẮNG | 2019 | 15000 |
FORD | NHẬN XÉT | XANH | 1998 | 80000 |
Phần 4 - SUBSTRING A lternatives cho Giá trị Số nguyên
Hàm SUBSTRING dành cho các giá trị chuỗi một cách rõ ràng, vì vậy truy vấn sau đây khi cố gắng phân tích cú pháp một giá trị số nguyên với SUBSTRING sẽ không thành công.
SELECT SUBSTRING(1000,1,1);
--Msg 8116, Level 16, State 1, Line 78 Argument data type int is invalid for argument 1 of substring function.
Lựa chọn thay thế khi phân tích cú pháp các giá trị số nguyên là hàm LEFT hoặc RIGHT, mặc dù cách tiếp cận này làm mất một số tính linh hoạt được trình bày với hàm SUBSTRING.
SELECT LEFT(10000,1); --RETURNS : 1
SELECT RIGHT(1000,1) ; --RETURNS : 0
Theo tình huống, bạn cũng có thể ép kiểu giá trị số nguyên một cách rõ ràng dưới dạng một chuỗi và tạo chuỗi con cho giá trị được ép kiểu:
SELECT (SUBSTRING(CAST(1000 AS VARCHAR(4)),1,1)) AS CASTED_SUBSTRING -- RETURNS : 1
Tóm tắt
Bài viết này đề cập đến các tham số cần thiết để sử dụng hàm SUBSTRING, một đối số mạnh cho vị trí bắt đầu và độ dài. Với mô hình dữ liệu không quan hệ, chúng tôi đã sử dụng phương pháp SUBSTRING để trích xuất các đặc điểm của ô tô từ 1 bảng trường và xây dựng một chế độ xem với một số logic chuyển đổi được tích hợp trong đó.
Phương thức SUBSTRING là một hàm tuyệt vời cần biết khi thực hiện ETL hoặc phân tích cú pháp dữ liệu bên trong cơ sở dữ liệu. Nó có thể được sử dụng để trích xuất các điểm dữ liệu quan trọng có ý nghĩa từ dữ liệu đã tồn tại bên trong cơ sở dữ liệu của bạn.