Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SUBSTRING-Befehl in SQL:Eine Einführung

Ähnlich wie in meinem Artikel zum SQL Server STUFF-Befehl , heute werden wir den SQL-Serverbefehl SUBSTRING untersuchen. Es ähnelt dem STUFF-Befehl in Bezug auf die Parameter, die es akzeptiert.

Folgende Parameter werden von SUBSTRING akzeptiert:

SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH)

Der SUBSTRING-Befehl ist in den meisten großen Standarddatenbanken wie SQL Server, MySQL, Oracle und Postgres weit verbreitet.

Lassen Sie uns die SUBSTRING-Funktion anhand mehrerer Beispiele untersuchen.

Abschnitt 1 – Einfache SUBSTRING-Beispiele

In diesem ersten Beispiel wird der Zeichenfolgenwert „ABC“ an die SUBSTRING-Funktion übergeben. Bei jedem Aufruf wird das Startpositionsargument um 1 erhöht. Das Längenargument bleibt bei jedem Aufruf 1.

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

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

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

Aus diesen Beispielen können wir die allgemeine Funktionalität der SUBSTRING-Funktion erkennen, jede Erhöhung der Startposition verschiebt den zurückgegebenen Buchstaben. In Ausführung #1 ist der Wert A, in #2 ist der Wert B und in #3 ist der Wert C.

Ein interessantes Merkmal der SUBSTRING-Funktion ist, dass der Längenparameter nicht unterbricht, wenn er die Länge des zu analysierenden Werts überschreitet. Beispielsweise hat der Wert „1000“ eine Länge von 4 Stellen. Wenn es mit der folgenden Abfrage geparst wird, die eine Länge von 6 angibt, gibt SUBSTRING die ursprüngliche Zeichenfolge zurück.

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

Abschnitt 2 – Parsing von Daten mit der SUBSTRING-Funktion

Nehmen wir für das nächste Beispiel an, dass wir eine Datenbank zum Speichern von Daten über Gebrauchtwagen haben. Anstatt jedoch ein relationales Datenmodell mit mehreren Tabellen zu verwenden, enthält die Datenbank nur einen Primärschlüssel und eine SKU oder Lagerhaltungseinheit. Diese SKU kann verwendet werden, um mehrere Felder rund um die Merkmale eines Autos zu finden, indem Sie den folgenden Schlüssel verwenden:

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

*In diesen Beispielen wird der Kilometerstand im Maßstab 1/1000 dargestellt, d. h. 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

Die Ausgabe der Gebrauchtwagentabelle ist:

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

Mit der Funktion SUBSTRING können diese Werte analysiert werden, indem dem Feld CAR_SKU die richtige Startposition und die richtigen Längenparameter zugewiesen werden.

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;
MACHEN MODELL FARBE JAHR Kilometerstand
SPIELZEUG CEL R 1990 150000
JEP WRG W 2019 15000
FRD ESC G 1998 80000

Abschnitt 3 – Abstrahieren der SUBSTRING-SQL-Logik in Ansichten

Mit der SQL SUBSTRING-Funktion konnten wir die verschiedenen Merkmale jedes Fahrzeugs in unserer Datenbank analysieren. Gehen wir noch einen Schritt weiter und übersetzen diese Ausgabe in aussagekräftigere Daten, indem wir eine Ansicht für die SUBSTRING-Abfrage erstellen.

In einem relationalen Datenmodell wird dies erreicht, indem Verknüpfungen verwendet werden, um die CASE WHEN-Anweisung zum Übersetzen der Werte einzubinden.

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
MACHEN MODELL FARBE JAHR Kilometerstand
TOYOTA CELICA ROT 1990 150000
JEEP WRANGLER WEISS 2019 15000
FORD ENTKOMMEN GRÜN 1998 80000

Abschnitt 4 – SUBSTRING A Alternativen für Integer-Werte

Die SUBSTRING-Funktion ist explizit für String-Werte, daher schlägt die folgende Abfrage fehl, die versucht, einen Integer-Wert mit SUBSTRING zu parsen.

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.

Die Alternative beim Analysieren ganzzahliger Werte ist die LEFT- oder RIGHT-Funktion, obwohl dieser Ansatz etwas von der Flexibilität verliert, die die SUBSTRING-Funktion bietet.

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

Situativ könnten Sie den Integer-Wert auch explizit als String umwandeln und den umgewandelten Wert substringen:

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

Zusammenfassung

Dieser Artikel behandelt die Parameter, die für die Verwendung der SUBSTRING-Funktion erforderlich sind, die ein starkes Argument für eine Startposition und eine Länge ist. Bei einem nicht relationalen Datenmodell haben wir die SUBSTRING-Methode verwendet, um die Fahrzeugfunktionen aus einer 1-Feld-Tabelle zu extrahieren und eine Ansicht mit einer darin integrierten Transformationslogik zu erstellen.

Die SUBSTRING-Methode ist eine großartige Funktion, die Sie kennen sollten, wenn Sie ETL ausführen oder die Daten in einer Datenbank analysieren. Es kann verwendet werden, um aussagekräftige Schlüsseldatenpunkte aus den bereits vorhandenen Daten in Ihrer Datenbank zu extrahieren.