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

SUBSTRING Comando in SQL:un primer

Simile al mio articolo relativo al comando STUFF di SQL Server , oggi esamineremo il comando del server SQL SUBSTRING. È simile al comando STUFF per quanto riguarda i parametri che accetta.

I parametri accettati da SUBSTRING sono i seguenti:

SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH)

Il comando SUBSTRING è prevalente nella maggior parte dei principali database standard come SQL Server, MySQL, Oracle e Postgres.

Esploriamo la funzione SUBSTRING con diversi esempi.

Sezione 1 – Esempi di SUBSTRING semplici

In questo primo esempio, un valore stringa di "ABC" verrà passato alla funzione SUBSTRING. Ogni chiamata avrà l'argomento della posizione iniziale incrementato di 1. L'argomento della lunghezza rimarrà 1 per ogni chiamata.

SELECT SUBSTRING('ABC',1,1); --RETURNS : A

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

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

Da questi esempi possiamo vedere la funzionalità generale della funzione SUBSTRING, ogni incremento nella posizione iniziale sposta la lettera restituita. Nell'esecuzione #1 il valore è A, #2 il valore è B e in #3 il valore è C.

Una caratteristica interessante della funzione SUBSTRING è che il parametro di lunghezza è unificatore se supera la lunghezza del valore che stai analizzando. Ad esempio, il valore "1000" ha una lunghezza di 4 cifre. Se analizzata con la query seguente che specifica una lunghezza di 6, SUBSTRING restituisce la stringa originale.

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

Sezione 2 – Analisi dei dati con la funzione SUBSTRING

Per il prossimo esempio, supponiamo di avere un database per conservare i dati sulle auto usate. Tuttavia, invece di utilizzare un modello di dati relazionale multi-tabella, il database contiene solo una chiave primaria e uno SKU o un'unità di scorta. Questo SKU può essere utilizzato per trovare più campi attorno alle caratteristiche di un'auto utilizzando la seguente chiave:

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

*In questi esempi il chilometraggio è rappresentato su una scala di 1/1000, ovvero 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

L'output della tabella auto usate è:

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

Utilizzando la funzione SUBSTRING, questi valori possono essere analizzati assegnando i corretti parametri di posizione iniziale e lunghezza al campo 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;
FAI MODELLO COLORE ANNO CHILOMETRIA
GIOCATTOLO CEL R 1990 150000
JEP WRG W 2019 15000
FRD ESC G 1998 80000

Sezione 3 – Astrazione della logica SQL SUBSTRING nelle viste

Utilizzando la funzione SQL SUBSTRING, siamo stati in grado di analizzare le varie caratteristiche di ciascun veicolo nel nostro database. Facciamo un ulteriore passo avanti e traduciamo quell'output in dati più significativi costruendo una vista sulla query SUBSTRING.

In un modello di dati relazionali, ciò sarà ottenuto utilizzando i join per incorporare l'istruzione CASE WHEN per tradurre i valori.

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
FAI MODELLO COLORE ANNO CHILOMETRIA
TOYOTA CELICA ROSSO 1990 150000
JEEP WRANGLER BIANCO 2019 15000
FORD SCAPE VERDE 1998 80000

Sezione 4 – SUBSTRING A alternative per valori interi

La funzione SUBSTRING è esplicitamente per valori di stringa, quindi la query seguente che tenta di analizzare un valore intero con SUBSTRING avrà esito negativo.

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'alternativa durante l'analisi di valori interi è la funzione SINISTRA o DESTRA, sebbene questo approccio perda parte della flessibilità presentata con la funzione SUBSTRING.

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

Situazionalmente potresti anche eseguire il cast esplicito del valore intero come stringa e sottostringa il valore castato:

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

Riepilogo

Questo articolo ha trattato i parametri necessari per utilizzare la funzione SUBSTRING, che è un valido argomento per una posizione iniziale e una lunghezza. Con un modello di dati non relazionale, abbiamo utilizzato il metodo SUBSTRING per estrarre le caratteristiche dell'auto da una tabella a 1 campo e costruire una vista con una logica di trasformazione incorporata.

Il metodo SUBSTRING è un'ottima funzione da sapere quando si esegue ETL o si analizzano i dati all'interno di un database. Può essere utilizzato per estrarre punti dati chiave significativi dai dati già esistenti all'interno del tuo database.