Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Commande SUBSTRING en SQL :une introduction

Similaire à mon article concernant la commande SQL Server STUFF , nous allons aujourd'hui examiner la commande serveur SQL SUBSTRING. Elle est similaire à la commande STUFF en ce qui concerne les paramètres qu'elle accepte.

Les paramètres acceptés par SUBSTRING sont les suivants :

SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH)

La commande SUBSTRING est courante dans la plupart des principales bases de données standard telles que SQL Server, MySQL, Oracle et Postgres.

Explorons la fonction SUBSTRING avec plusieurs exemples.

Section 1 – Exemples simples de SUBSTRING

Dans ce premier exemple, une valeur de chaîne de "ABC" sera transmise à la fonction SUBSTRING. Chaque appel aura l'argument de position de départ incrémenté de 1. L'argument de longueur restera 1 pour chaque appel.

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

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

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

À partir de ces exemples, nous pouvons voir la fonctionnalité générale de la fonction SUBSTRING, chaque incrément dans la position de départ décale la lettre renvoyée. Dans l'exécution #1 la valeur est A, #2 la valeur est B et dans #3 la valeur est C.

Une caractéristique intéressante de la fonction SUBSTRING est que le paramètre de longueur est insécable s'il dépasse la longueur de la valeur que vous analysez. Par exemple, la valeur "1000" a une longueur de 4 chiffres. S'il est analysé avec la requête suivante spécifiant une longueur de 6, SUBSTRING renvoie la chaîne d'origine.

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

Section 2 – Analyse des données avec la fonction SUBSTRING

Pour l'exemple suivant, supposons que nous ayons une base de données pour conserver les données sur les voitures d'occasion. Cependant, au lieu d'utiliser un modèle de données relationnelles multi-tables, la base de données contient uniquement une clé primaire et un SKU ou une unité de gestion des stocks. Ce SKU peut être utilisé pour trouver plusieurs champs autour des caractéristiques d'une voiture en utilisant la clé suivante :

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

*Dans ces exemples, le kilométrage est représenté à une échelle de 1/1000, c'est-à-dire 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

La sortie de la table des voitures d'occasion est :

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

À l'aide de la fonction SUBSTRING, ces valeurs peuvent être analysées en affectant les paramètres de position de départ et de longueur corrects au champ 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;
FAIRE MODÈLE COULEUR ANNÉE KILOMÉTRAGE
JOUET CEL R 1990 150000
PEC WRG W 2019 15000
FRD ESC G 1998 80000

Section 3 – Abstraction de la logique SQL SUBSTRING aux vues

Grâce à la fonction SQL SUBSTRING, nous avons pu analyser les différentes caractéristiques de chaque véhicule dans notre base de données. Allons plus loin et traduisons cette sortie en données plus significatives en créant une vue sur la requête SUBSTRING.

Dans un modèle de données relationnel, cela sera réalisé en utilisant des jointures pour incorporer l'instruction CASE WHEN afin de traduire les valeurs.

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
FAIRE MODÈLE COULEUR ANNÉE KILOMÉTRAGE
TOYOTA CELICA ROUGE 1990 150000
JEEP WANGLER BLANC 2019 15000
FORD ÉCHAPPER VERT 1998 80000

Section 4 – SOUS-CHAINE A alternatives pour les valeurs entières

La fonction SUBSTRING est explicitement pour les valeurs de chaîne, donc la requête suivante tentant d'analyser une valeur entière avec SUBSTRING échouera.

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'alternative lors de l'analyse des valeurs entières est la fonction LEFT ou RIGHT, bien que cette approche perde une partie de la flexibilité présentée avec la fonction SUBSTRING.

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

Situationnellement, vous pouvez également transtyper explicitement la valeur entière en chaîne et sous-chaîner la valeur transtypée :

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

Résumé

Cet article a couvert les paramètres requis pour utiliser la fonction SUBSTRING qui est un argument fort pour une position de départ et une longueur. Avec un modèle de données sans relation, nous avons utilisé la méthode SUBSTRING pour extraire les caractéristiques de la voiture d'une table à 1 champ et construire une vue avec une logique de transformation intégrée.

La méthode SUBSTRING est une excellente fonction à connaître lors de l'exécution d'ETL ou de l'analyse des données dans une base de données. Il peut être utilisé pour extraire des points de données clés significatifs à partir des données déjà existantes dans votre base de données.