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.