Substring() in SQL Server: Anwendung anhand eines Beispiels

⚡ Intelligente Zusammenfassung

SUBSTRING() in SQL Server extracts ist ein Teil eines Zeichens, Textes oder Binärausdrucks, der eine festgelegte Anzahl von Zeichen ab einer gewählten Startposition zurückgibt und sich natürlich mit CHARINDEX für die auf Trennzeichen basierende Analyse kombinieren lässt.

  • Zweck: Die Funktion SUBSTRING() gibt einen bestimmten Teil einer Zeichenkette zurück, wenn der Quellausdruck, die Startposition und die Länge angegeben werden.
  • 🔢 Drei Argumente: Der Ausdruck, die Startposition und die Gesamtlänge sind bei der SQL Server-Funktion SUBSTRING() obligatorisch.
  • 📍 Einsbasierter Index: Die Startposition ist 1-basiert, daher zählt das erste Zeichen als Position eins, wodurch Fehler durch Vertauschen um eine Position vermieden werden.
  • 🔎 Mit CHARINDEX: Die Kombination von SUBSTRING() und CHARINDEX() findet ein Trennzeichen und ein Exponentialsymbol.tracts der Text davor oder danach.
  • ↔️ Im Vergleich zu LINKS und RECHTS: Im Gegensatz zu LEFT() und RIGHT(), SUBSTRING() extracts-Zeichen von jeder Position, nicht nur von den Enden.
  • ⚠️ Randfälle: Bei einer Länge von NULL wird NULL zurückgegeben, während bei einer Länge über die Zeichenkette hinaus der Rest zurückgegeben wird, ohne einen Fehler auszulösen.

Die SUBSTRING()-Funktion in SQL Server mit T-SQL-Beispielen

Was ist Substring()?

SUBSTRING() ist eine Funktion in SQL Diese Funktion ermöglicht es dem Benutzer, je nach Bedarf eine Teilzeichenkette aus einer beliebigen Zeichenkette zu extrahieren. Beispiel: SUBSTRING()trac`ts` ist eine Zeichenkette bestimmter Länge, die an einer bestimmten Position in einer Eingabezeichenkette beginnt. Die Funktion `SUBSTRING()` in SQL dient dazu, einen bestimmten Teil der Zeichenkette zurückzugeben.

Syntax für Substring()

SUBSTRING(Expression, Starting Position, Total Length)

Hier:

  • Der SUBSTRING()-Ausdruck in SQL Server Es kann sich um beliebige Zeichen, Binärdaten, Text oder Bilder handeln. Der Ausdruck ist die Quellzeichenkette, aus der die Teilzeichenkette extrahiert wird.
  • Die Startposition bestimmt die Position im Ausdruck, ab der die neue Teilzeichenkette beginnen soll.
  • Die Gesamtlänge ist die erwartete Gesamtlänge der resultierenden Teilzeichenkette des Ausdrucks, beginnend an der Startposition.

Regeln für die Verwendung von SUBSTRING()

  • Alle drei Argumente sind in der MS SQL-Funktion SUBSTRING() obligatorisch.
  • Wenn die Startposition größer ist als die maximale Anzahl von Zeichen im Ausdruck, gibt die Funktion SUBSTRING() in SQL Server nichts zurück.
  • Die Gesamtlänge kann die maximale Zeichenlänge der ursprünglichen Zeichenkette überschreiten. In diesem Fall ist die resultierende Teilzeichenkette die gesamte Zeichenkette, beginnend mit der Startposition im Ausdruck bis zum letzten Zeichen des Ausdrucks.

Das folgende Diagramm veranschaulicht die Verwendung der SUBSTRING()-Funktion in SQL Server:

Diagramm, das zeigt, wie SUBSTRING() extracts Zeichen von einer Startposition für eine gegebene Länge

Beispiele für T-SQL-Teilzeichenfolgen

Annahme: Angenommen, wir haben eine Tabelle mit dem Namen 'Guru99' mit zwei Spalten und vier Zeilen, wie unten dargestellt. Wir werden dieses 'GuruTabelle 99 in den folgenden Beispielen:

Guru99 Beispieltabelle mit den Spalten Tutorial_ID und Tutorial_name, die in den SUBSTRING-Beispielen verwendet werden

Abfrage 1: SUBSTRING() in SQL mit einer Länge, die kleiner ist als die maximale Gesamtlänge des Ausdrucks.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;

Ergebnis: Das folgende Diagramm zeigt die Teilzeichenkette der Spalte „Tutorial_name“ als Spalte „SUB“. Die Startposition ist 1 und die Länge 2, daher werden die ersten beiden Zeichen zurückgegeben:

Ergebnisraster, das die ersten beiden Zeichen von Tutorial_name als SUB-Spalte zurückgibt

Abfrage 2: SUBSTRING() in SQL Server mit einer Länge, die größer ist als die maximale Gesamtlänge des Ausdrucks.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;

Ergebnis: Das folgende Diagramm zeigt die Teilzeichenkette der Spalte „Tutorial_name“ als Spalte „SUB“. Obwohl die Länge der Teilzeichenkette größer ist als die maximale Gesamtlänge des Ausdrucks, wird kein Fehler ausgelöst, und die Abfrage gibt die vollständige Zeichenkette ab der Startposition zurück.

Ergebnisraster, das den Rest von Tutorial_name zurückgibt, wenn die angeforderte Länge die Zeichenkette überschreitet

SUBSTRING mit CHARINDEX in SQL Server

Ein sehr häufiger Anwendungsfall von SUBSTRING() in der Praxis ist das Extrahieren von...tracText, der vor oder nach einem Trennzeichen steht, wie beispielsweise die Domain in einer E-Mail-Adresse. Die Funktion SUBSTRING() benötigt eine feste Startposition, die Position eines Trennzeichens variiert jedoch von Zeile zu Zeile. Die Funktion CHARINDEX() löst dieses Problem, indem sie die Position eines Zeichens innerhalb einer Zeichenkette zurückgibt.

CHARINDEX(substring_to_find, expression [, start_location])

Durch die Verschachtelung von CHARINDEX() innerhalb von SUBSTRING() wird die Startposition dynamisch. Das folgende Beispiel findet die @ Symbol und gibt alles danach zurück. A Variable enthält den Stichprobenwert:

DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com';
SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;

Hier ermittelt CHARINDEX('@', @Email) die Position des @-Symbols, durch Addition von 1 wird es über dieses hinaus verschoben, und SUBSTRING() führt dann zu extracts die verbleibenden Zeichen. Für den obigen Wert gibt die Abfrage die Domäne zurück. guru99.comDieses CHARINDEX-plus-SUBSTRING-Muster ist die Standardmethode zum Parsen strukturierter Zeichenketten in T-SQL.

SUBSTRING vs. LEFT und RIGHT in SQL Server

SQL Server bietet außerdem die Funktionen LEFT() und RIGHT(), um Zeichen vom Anfang bzw. Ende einer Zeichenkette zu extrahieren. Sie sind kürzer, aber auf die beiden Enden beschränkt. SUBSTRING() ist am flexibelsten, da es an jeder beliebigen Position beginnen kann. Die folgende Tabelle vergleicht die Funktionen:

Funktion Argumente Extracts von Äquivalente SUBSTRING()
LINKS(Ausdruck, n) 2 Anfang der Zeichenfolge SUBSTRING(Ausdruck, 1, n)
RECHTS(Ausdruck, n) 2 Ende der Zeichenfolge SUBSTRING(Ausdruck, LEN(Ausdruck) – n + 1, n)
SUBSTRING(Ausdruck, Start, Länge) 3 Jede Position Unzutreffend

Kurz gesagt, sind LEFT() und RIGHT() praktische Kurzformen für die Enden einer Zeichenkette, während SUBSTRING() den allgemeinen Fall abdeckt, einschließlich Zeichen aus der Mitte.

Negative, Null- und NULL-Argumente in SUBSTRING

Neben den Grundregeln ist es hilfreich zu wissen, wie sich SUBSTRING() an den Rändern verhält. Wenn die Startposition null oder negativ ist, berechnet SQL Server eine effektive Länge von (Startposition + Länge – 1) und beginnt ab Position eins zu lesen. Wenn ein Argument NULL ist, ist auch das Ergebnis NULL. Die folgende Tabelle wurde mit der offiziellen Dokumentation abgeglichen. SUBSTRING (Transact-SQL) Die Referenz zeigt folgende Fälle:

Telefon Lösung Grund
SUBSTRING('Guru99', 1, 4) Guru Normaler Aufruf: vier Zeichen ab Position eins.
SUBSTRING('Guru99', 0, 3) Gu Beginnen Sie unterhalb von eins: Die effektive Länge beträgt 0 + 3 – 1 = 2.
SUBSTRING('Guru99', 4, 100) u99 Bei einer Länge über den String hinaus wird der Rest ohne Fehler zurückgegeben.
SUBSTRING('Guru99', 3, NULL) NULL Ein NULL-Argument führt dazu, dass das gesamte Ergebnis NULL ist.

Die Kenntnis dieser Sonderfälle verhindert Überraschungen, wenn die Startposition aus einer anderen Spalte oder einem anderen Datensatz berechnet wird. Variable Das kann Null oder NULL sein.

Häufig gestellte Fragen

SQL Server verwendet SUBSTR(); SUBSTR() ist der Name, der in Oracle und MySQLBeide Funktionen geben einen Teil einer Zeichenkette zurück, aber SUBSTR() ist die Standard-Transact-SQL-Funktion, daher funktioniert SUBSTR() nicht auf SQL Server.

Ja. Da SUBSTRING() einen Wert zurückgibt, kann es in den WHERE-, SELECT- und ORDER BY-Klauseln verwendet werden. Das Filtern nach SUBSTRING() verhindert in der Regel eine Indexsuche, daher ist ein LIKE-Muster bei Präfixsuchen oft schneller.

Ja, aber SQL Server konvertiert den Wert zunächst in einen String, entweder implizit oder mithilfe von CAST oder CONVERT. Die Startposition und die Länge zählen dann die Zeichen, nicht die Ziffern oder Datumsbestandteile. Formatieren Sie den Wert daher sorgfältig.

Die Form mit drei Argumenten verhält sich ähnlich, aber es gibt Unterschiede in den Details. MySQL erlaubt außerdem SUBSTR() und negative Startpositionen, während SQL Server SUBSTRING() verwendet und einen Start unterhalb von eins nach der Regel der effektiven Länge behandelt.

Die Funktion SUBSTRING() gibt dieselbe Kategorie wie ihre Eingabe zurück: varchar für Zeichendaten, nvarchar für Unicode-Text und varbinary für Binärausdrücke. Die Länge hängt von der angeforderten Teilzeichenkette ab, nicht von der gesamten Quellspalte.

einwickelnping Eine Spalte in SUBSTRING() innerhalb einer WHERE-Klausel macht das Prädikat nicht suchbar, sodass SQL Server keine Indexsuche für diese Spalte durchführen kann. Bei Präfixübereinstimmungen ist das Muster LIKE 'Wert%' in der Regel performanter.

Ja. GitHub-Copilot Kann SUBSTRING()- und CHARINDEX()-Ausdrücke, einschließlich der Analyse mit Trennzeichen, anhand einer natürlichsprachlichen Eingabeaufforderung erstellen. Überprüfen Sie vor der Ausführung der Abfrage stets die Startposition, die Länge und die 1-basierte Indizierung.

KI- und Machine-Learning-Assistenten übersetzen Regeln in natürlicher Sprache in Kombinationen aus SUBSTRING(), CHARINDEX(), LEFT() und RIGHT(), schlagen Längenberechnungen vor und kennzeichnen Fehler, die um eins abweichen. Der Entwickler prüft jeden Vorschlag auf Korrektheit, bevor er ihn implementiert.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: