24th Nov 2022 8 Leseminuten Die SQL-Substring-Funktion in 5 Beispielen Tihomir Babic SQL-Textfunktionen Inhaltsverzeichnis Was ist die Funktion SUBSTRING()? Wie funktioniert SUBSTRING()? Beispiel 1: Teilzeichenfolge aus einem String-Literal Die Tabelle "Mitarbeiter Beispiel 2: Teilzeichenfolge aus einer Spalte Beispiel 3: Teilzeichenfolge ohne das Argument Länge Beispiel 4: POSITION() und CHARINDEX() Beispiel 5: LENGTH() + POSITION() Erfahren Sie mehr über SUBSTRING () und die Arbeit mit Textdaten Arbeiten Sie mit Textdaten in SQL? Wir erklären, wie man Werte von jeder beliebigen Stelle in einer Zeichenkette abrufen kann. Wenn Sie an die Arbeit mit Daten in SQL denken, denken Sie wahrscheinlich zuerst an eine Datenbank voller Zahlen und an Ihren SQL-Code, der sehr ausgefallene Berechnungen durchführt. Aber auch Text ist Daten! Textdaten sind in Datenbanken sehr häufig zu finden. Man muss sie nicht nur extrahieren, sondern oft auch manipulieren. Die Funktionen, mit denen man dies tun kann, heißen Textfunktionen. Für alle, die SQL-Funktionen üben wollen, empfehle ich unseren interaktiven Standard-SQL-Funktionen Kurs. Er enthält 211 Übungen und bringt Ihnen bei, wie man gängige Text-, Zahlen-, Datums- und Zeitfunktionen in SQL verwendet. Eine der häufigsten Textfunktionen, die im Kurs behandelt werden, ist SUBSTRING(). In diesem Artikel finden Sie fünf Beispiele aus der Praxis, die die wichtigsten Verwendungszwecke dieser Funktion abdecken. Einige Beispiele können sich kompliziert anfühlen, wenn Sie mit den Textfunktionen nicht vertraut sind. Stellen Sie daher sicher, dass Sie den Standard-SQL-Funktionen Spickzettel oder einen Überblick über SQL-Textfunktionen zur Hand haben. Was ist die Funktion SUBSTRING()? SUBSTRING() ist eine Textfunktion, mit der Sie Zeichen aus einer Zeichenkette extrahieren können. Ihre Syntax lautet SUBSTRING(expression, start, length) Für das Argument expression geben Sie ein Stringliteral oder eine Spalte an, aus der Sie die Teilzeichenkette extrahieren möchten. Das Argument start ist eine ganze Zahl, die die numerische Position des Zeichens in der Zeichenkette angibt, an der die Teilzeichenkette beginnt. Das Argument length gibt, wie der Name schon sagt, die Länge der zurückzugebenden Teilzeichenkette an, die ein Integer-Wert ist. Wie funktioniert SUBSTRING()? Der Hinweis liegt im Namen der Funktion selbst. Eine Teilzeichenkette ist eine Zeichenkette innerhalb der Hauptzeichenkette. Daher extrahiert SUBSTRING() eine Teilzeichenkette, wie Sie sie in ihrem Argument angeben. Das funktioniert folgendermaßen: In der obigen Zeichenkette ist die Teilzeichenkette, die an Position 1 beginnt und eine Länge von drei Zeichen hat, ‘STR’. Nachdem wir nun die Prinzipien kennen, möchte ich Ihnen einige Beispiele zeigen. Ich beginne natürlich mit dem einfachsten Beispiel! Beispiel 1: Teilzeichenfolge aus einem String-Literal Die Funktion SUBSTRING() gibt eine Teilzeichenkette aus einer beliebigen Zeichenkette zurück. Sie können die Zeichenkette explizit als Argument angeben, etwa so: SELECT SUBSTRING('This is the first substring example', 9, 10) AS substring_extraction; Dies bedeutet: Ich möchte eine Teilzeichenkette aus dem Text ‘This is the first substring example’ finden. Die Argumente besagen, dass die Teilzeichenkette am 9. Zeichen der Zeichenkette beginnt und dass ihre Länge 10 Zeichen beträgt. Schauen wir uns an, was dieser Code zurückgibt: substring_extraction the first Es gibt eine Spalte und eine Zeile. Die extrahierte Teilzeichenkette ist ‘the first’. Dies ist die einfachste Anwendung von SUBSTRING(); der Code verwendet nicht einmal Tabellen! Die Tabelle "Mitarbeiter Um Ihnen weitere interessante Beispiele zu zeigen, benötige ich einige Daten. Ich möchte Ihnen eine Tabelle namens employees. Die Tabelle speichert Informationen über die Mitarbeiter eines imaginären Unternehmens Kooler in den folgenden Spalten: id - Die ID des Mitarbeiters. first_name - Der Vorname des Mitarbeiters. last_name - Der Nachname des Mitarbeiters. email - Die E-Mail des Mitarbeiters. job_title - Die Berufsbezeichnung des Mitarbeiters. department - Die Abteilung des Mitarbeiters. start_date - Das Anfangsdatum des Mitarbeiters bei Kooler. Hier sind die ersten paar Zeilen, damit Sie einen Eindruck von den Daten bekommen: idfirst_namelast_nameemailjob_titledepartmentstart_date 1ClarenceWilkinsoncwilkinson@kooler.comJunior Sales AssistantSales09/2021 2MirandaBrownmbrown@kooler.comSenior Sales SpecialistSales01/2020 3FrankDrebinfdrebin@kooler.comJunior Sales ManagerSales08/2019 Beispiel 2: Teilzeichenfolge aus einer Spalte Wie Sie sich vorstellen können, ist das explizite Schreiben des String-Ausdrucks nicht die einzige Möglichkeit, SUBSTRING() zu verwenden. Sie können ihn auch auf eine Spalte einer Tabelle anwenden. Hier ist ein solches Beispiel. Ich möchte die Initialen aller Mitarbeiter finden. Ich verwende die Spalte email, da ich weiß, dass die ersten beiden Buchstaben der E-Mail-Adresse die Initialen sind: SELECT first_name, last_name, email, SUBSTRING(email, 1, 2) AS employee_initials FROM employees; Ich gebe die Spalte email in der Funktion an. Wenn ich die ersten beiden Buchstaben der E-Mail-Adresse abrufe, beginnt die Teilzeichenkette mit dem ersten Zeichen und hat eine Länge von zwei Zeichen. Dies liefert das gewünschte Ergebnis: first_namelast_nameemailemployee_initials ClarenceWilkinsoncwilkinson@kooler.comcw MirandaBrownmbrown@kooler.commb FrankDrebinfdrebin@kooler.comfd VivienKellyvkelly@kooler.comvk SteveStephenssstephens@kooler.comss NastassjaHarrisonnharrison@kooler.comnh ThomasPetersontpeterson@kooler.comtp MathildeKinskimkinski@kooler.commk MateuszWozniakmwozniak@kooler.commw AineDoyleadoyle@kooler.comad LorenzoAlfieriaalfieri@kooler.comaa PetraBabićpbabic@kooler.compb DuarteSimoesdsimoes@kooler.comds OlenaKostenkookostenko@kooler.comok LaurensGrotenhuislgrotenhuis@kooler.comlg Beispiel 3: Teilzeichenfolge ohne das Argument Länge Sie können das Argument Länge in SUBSTRING() weglassen, und die Funktion funktioniert trotzdem. Ein gutes Beispiel ist, wenn Sie nur das Jahr des Beschäftigungsbeginns anzeigen möchten. Sie sehen, die Spalte start_date ist dafür etwas unfreundlich. Dieses Datum wird als Textdaten im Format MM/JJJJ geschrieben. Glücklicherweise löst SUBSTRING() dieses Problem: SELECT first_name, last_name, start_date, SUBSTRING(start_date, 4) AS start_year FROM employees; Um das Jahr aus der Spalte start_date zu erhalten, genügt es, den Beginn der Teilzeichenkette zu definieren. In diesem Code beginnt die Teilzeichenkette mit dem vierten Zeichen. Da ich das Längenargument weglasse, ist die Länge der Teilzeichenkette so lang, wie es vom vierten Zeichen bis zum Ende der Zeichenkette ist. Auf diese Weise erhalte ich ganz einfach die Jahreszahl, wie Sie unten sehen: first_namelast_namestart_datestart_year ClarenceWilkinson09/20212021 MirandaBrown01/20202020 FrankDrebin08/20192019 VivienKelly03/20192019 SteveStephens07/20212021 NastassjaHarrison03/20222022 ThomasPeterson01/20222022 MathildeKinski01/20222022 MateuszWozniak01/20222022 AineDoyle10/20212021 LorenzoAlfieri10/20212021 PetraBabić05/20212021 DuarteSimoes04/20202020 OlenaKostenko11/20192019 LaurensGrotenhuis06/20172017 Beispiel 4: POSITION() und CHARINDEX() Zurück zur Arbeit mit E-Mails. Gemäß den Unternehmensrichtlinien ist der lokale Punkt einer E-Mail-Adresse (d. h. der Teil vor dem '@') auch der Benutzername des Mitarbeiters für die Anmeldung bei allen Geschäftsanwendungen. Sie müssen diesen Benutzernamen extrahieren. So geht's: SELECT first_name, last_name, SUBSTRING (email, 1, POSITION('@' IN email)-1) AS username FROM employees; Die ersten beiden Argumente haben Sie bereits gesehen. Ich möchte eine Teilzeichenkette aus der Spalte email extrahieren, die mit dem ersten Zeichen der Zeichenkette beginnen soll. Nun ist aber die Länge der Teilzeichenkette für jeden Mitarbeiter unterschiedlich. Wie kann ich der Funktion sagen, dass sie alle Zeichen vor dem Zeichen "@" zurückgeben soll? Ich verwende POSITION(), was CHARINDEX() in SQL Server oder MySQL entspricht. Sie sucht das angegebene Zeichen in der Zeichenkette und gibt dessen numerische Zeichenposition zurück. Die Länge der Teilzeichenkette, die den Benutzernamen des Mitarbeiters darstellt, ist also gleich POSITION('@' IN email)-1. Warum minus eins? Weil ich nicht möchte, dass das '@' im Benutzernamen des Mitarbeiters enthalten ist. Dies ist das Ergebnis: first_namelast_nameusername ClarenceWilkinsoncwilkinson MirandaBrownmbrown FrankDrebinfdrebin VivienKellyvkelly SteveStephenssstephens NastassjaHarrisonnharrison ThomasPetersontpeterson MathildeKinskimkinski MateuszWozniakmwozniak AineDoyleadoyle LorenzoAlfieriaalfieri PetraBabićpbabic DuarteSimoesdsimoes OlenaKostenkookostenko LaurensGrotenhuislgrotenhuis Beispiel 5: LENGTH() + POSITION() Das letzte Beispiel zeigt Ihnen, wie Sie die Position eines Mitarbeiters aus den Daten ermitteln können. Da ich bei Kooler arbeite, weiß ich, wie die Stellenbezeichnungen gebildet werden: Zuerst kommt das Dienstalter des Mitarbeiters, dann die Abteilung, dann die Position. Zum Beispiel bedeutet "Junior Sales Assistant", dass der Mitarbeiter ein jüngeres Dienstalter hat, im Verkauf tätig ist und als Assistent arbeitet. Mit SQL kann ich dies als Teilstring extrahieren: SELECT first_name, last_name, job_title, SUBSTRING(job_title, LENGTH(job_title) - POSITION(' ' IN REVERSE(job_title))+2) AS position FROM employees; Dies ist ein weiteres Beispiel für das Weglassen des Längenarguments, wenn auch ein wenig komplexer. Wie immer gebe ich zuerst die String-Spalte an - in diesem Fall job_title. Danach muss ich irgendwie eine Teilzeichenkette finden, die nur aus dem letzten Wort des Jobtitels besteht. Dazu verwende ich zunächst LENGTH(). Sie gibt die Länge der Zeichenkette in der Spalte job_title zurück. Das ist ein Anfang; es ist die Länge aller drei Wörter zusammen, einschließlich der Leerzeichen. Wenn ich davon irgendwie die Anzahl der Zeichen im letzten Wort abziehen könnte, dann hätte ich die Länge der ersten beiden Wörter, was mir dann den Anfang der gewünschten Teilzeichenkette liefern würde. Diese ist ein wenig kompliziert, weil die Namen der verschiedenen Positionen unterschiedlich lang sind. Das einzige, was die Wörter trennt, ist das Leerzeichen. Um also die Länge des dritten Wortes in der Zeichenkette zu ermitteln, muss ich die Anzahl der Zeichen bis zum Leerzeichen zählen, aber von rechts. Die Funktion POSITION() rettet wieder den Tag, aber dieses Mal in Kombination mit REVERSE(). Die Funktion REVERSE() kehrt den String-Ausdruck um, so dass aus "Junior Sales Assistant" "tnatsissA selaS roinuJ" wird. Das letzte Wort wird zum ersten; das Wort selbst wird ebenfalls umgekehrt, aber das spielt hier keine Rolle. POSITION() findet die Position des Leerzeichens nach dem ersten Wort der umgekehrten Zeichenfolge. Dies entspricht der Stelle des Leerzeichens vor dem letzten Wort in der ursprünglichen (nicht umgedrehten) Zeichenfolge. Puh! Wenn ich nun diese Zahl von der Gesamtlänge der ursprünglichen Zeichenkette abziehe, erhalte ich den Anfang der Teilzeichenkette, richtig? Nun, nicht ganz! Die Differenz ergibt eine Teilzeichenkette, die den letzten Buchstaben des zweiten Wortes und das Leerzeichen vor dem letzten Wort enthält. Warum ist das so? Aus zwei Gründen. Das Startargument der Funktion SUBSTRING() ist inklusive. Außerdem berechnet POSITION() die Position des Leerzeichens, nicht die Anzahl der Zeichen bis zum Leerzeichen. Ich muss also 2 addieren, um dieses Ergebnis zu erhalten: first_namelast_namejob_titleposition ClarenceWilkinsonJunior Sales AssistantAssistant MirandaBrownSenior Sales SpecialistSpecialist FrankDrebinJunior Sales ManagerManager VivienKellySenior Sales ManagerManager SteveStephensJunior Sales SpecialistSpecialist NastassjaHarrisonJunior Sales SpecialistSpecialist ThomasPetersonJunior Reporting SpecialistSpecialist MathildeKinskiJunior Reporting AnalystAnalyst MateuszWozniakSenior Reporting ExpertExpert AineDoyleJunior Reporting ManagerManager LorenzoAlfieriSenior Reporting ManagerManager PetraBabićJunior HR AssistantAssistant DuarteSimoesJunior HR AssistantAssistant OlenaKostenkoSenior HR AssistantAssistant LaurensGrotenhuisSenior HR ManagerManager Nachdem ich nun ein paar andere Funktionen vorgestellt habe, sollten Sie sich einige andere Textfunktionen ansehen, die für Sie nützlich sein könnten. Erfahren Sie mehr über SUBSTRING () und die Arbeit mit Textdaten Jetzt wissen Sie, wann und wie Sie SUBSTRING() verwenden können. Es ist Zeit zum Üben! Es gibt noch andere Textfunktionen, nicht nur SUBSTRING(). Sie finden sie (und noch viel mehr!) im Standard-SQL-Funktionen Kurs. Sie sind sich noch nicht sicher, ob der Kurs etwas für Sie ist? Hier finden Sie eine detaillierte Beschreibung, was der Kurs abdeckt und wie er Ihnen hilft. Tags: SQL-Textfunktionen