sql >> Database teknologi >  >> RDS >> Sqlserver

SUBSTRING Kommando i SQL:A Primer

Svarende til min artikel om SQL Server STUFF-kommandoen , i dag vil vi undersøge SUBSTRING SQL-serverkommandoen. Den ligner STUFF-kommandoen med hensyn til de parametre, den accepterer.

De parametre, der accepteres af SUBSTRING, er som følger:

SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH) 

SUBSTRING-kommandoen er udbredt i de fleste større standarddatabaser som SQL Server, MySQL, Oracle og Postgres.

Lad os udforske SUBSTRING-funktionen med flere eksempler.

Afsnit 1 – Simple SUBSTRING-eksempler

I dette første eksempel vil en strengværdi på "ABC" blive sendt til SUBSTRING-funktionen. Hvert kald vil have startpositionsargumentet forøget med 1. Længdeargumentet forbliver 1 for hvert kald.

SELECT SUBSTRING('ABC',1,1); --RETURNS : A SELECT SUBSTRING('ABC',2,1); --RETURNS : B SELECT SUBSTRING('ABC',3,1); --RETURNS : C

Fra disse eksempler kan vi se den generelle funktionalitet af SUBSTRING-funktionen, hver stigning i startpositionen flytter det returnerede bogstav. I udførelse #1 er værdien A, #2 er værdien B og i #3 er værdien C.

Et interessant træk ved SUBSTRING-funktionen er, at længdeparameteren er ikke-brud, hvis den overskrider længden af ​​den værdi, du parser. For eksempel har værdien "1000" en længde på 4 cifre. Hvis den parses med følgende forespørgsel, der angiver en længde på 6, returnerer SUBSTRING den oprindelige streng.

SELECT SUBSTRING('1000',1,6); --RETURNS : 1000

Afsnit 2 – Parsing af data med SUBSTRING-funktionen

For det næste eksempel, lad os antage, at vi har en database til at opbevare data om brugte biler. Men i stedet for at bruge en multi-table relationel datamodel, indeholder databasen kun en primær nøgle og en SKU eller lagerenhed. Denne SKU kan bruges til at finde flere felter omkring funktionerne i en bil ved at bruge følgende nøgle:

TOY-CEL-R-1990-150
-------------------------------------------------------
MAKE-MODEL-COLOR-YEAR-MILEAGE 

*I disse eksempler er kilometertal repræsenteret på en skala på 1/1000, dvs. 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 

Outputtet fra brugtbilstabellen er:

ID CAR_SKU
1 TOY-CEL-R-1990-150
2 JEP-WRG-W-2019-15
3 FRD-ESC-G-1998-80

Ved at bruge SUBSTRING-funktionen kan disse værdier parses ved at tildele den korrekte startposition og længdeparametre til CAR_SKU-feltet.

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 MODEL FARVE ÅR MILEAGE
LEGETØJ CEL R 1990 150.000
JEP WRG W 2019 15.000
FRD ESC G 1998 80.000

Afsnit 3 – Abstraktion af SUBSTRING SQL-logikken til visninger

Ved at bruge SQL SUBSTRING-funktionen var vi i stand til at analysere de forskellige funktioner i hvert køretøj i vores database. Lad os tage dette 1 skridt længere og omsætte dette output til mere meningsfulde data ved at opbygge en visning på SUBSTRING-forespørgslen.

I en relationel datamodel vil dette blive opnået ved at bruge joins til at inkorporere CASE WHEN-sætningen for at oversætte værdierne.

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 MODEL FARVE ÅR MILEAGE
TOYOTA CELICA RØD 1990 150.000
JEEP WRANGLER HVID 2019 15.000
FORD ESCAPE GRØN 1998 80.000

Afsnit 4 – SUBSTRING A alternativer til heltalsværdier

SUBSTRING-funktionen er eksplicit for strengværdier, så den følgende forespørgsel, der forsøger at parse en heltalsværdi med SUBSTRING, vil mislykkes.

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.

Alternativet, når man analyserer heltalsværdier, er funktionen VENSTRE eller HØJRE, selvom denne tilgang mister noget af fleksibiliteten, der præsenteres med SUBSTRING-funktionen.

SELECT LEFT(10000,1); --RETURNS : 1 SELECT RIGHT(1000,1) ; --RETURNS : 0

Situationsmæssigt kan du også eksplicit caste heltalsværdien som en streng og understreng den castede værdi:

SELECT (SUBSTRING(CAST(1000 AS VARCHAR(4)),1,1)) AS CASTED_SUBSTRING -- RETURNS : 1 

Oversigt

Denne artikel dækkede de parametre, der kræves for at bruge SUBSTRING-funktionen, som er et stærkt argument for en startposition og en længde. Med en ikke-relationsdatamodel brugte vi SUBSTRING-metoden til at udtrække bilegenskaberne fra en 1-feltstabel og konstruere en visning med en indbygget transformationslogik.

SUBSTRING-metoden er en fantastisk funktion at kende, når du udfører ETL eller parser data inde i en database. Det kan bruges til at udtrække meningsfulde nøgledatapunkter fra de allerede eksisterende data inde i din database.


  1. Tilpas Spotlight Cloud Alarmer

  2. Driving Performance for PostgreSQL med HAProxy

  3. Hvad gør DELIMITER // i en trigger?

  4. Sammenføjning af flere tabeller i SQL