Ä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.