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

Lệnh SUBSTRING trong SQL:A Primer

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra có bao nhiêu mục thư trong hàng đợi trong thư cơ sở dữ liệu trong SQL Server (T-SQL)

  2. Cách sao chép dữ liệu bảng khổng lồ vào một bảng khác trong SQL Server

  3. Các biến phân biệt chữ hoa chữ thường trong SQL Server

  4. Câu lệnh SQL CASE

  5. Cách khắc phục “Yêu cầu GIAO DỊCH COMMIT không có GIAO DỊCH BẮT ĐẦU tương ứng” trong SQL Server