Heute beschäftigen wir uns mit der Sortierung innerhalb eines Strings mittels T-SQL. Wie die Sortierung eines Strings mittels T-SQL funktioniert und welche Besonderheiten man beachten sollte, erklären wir in diesem kurzen Artikel.
Das Sortieren eines Strings mittels T-SQL ist relativ einfach, wenn man weiß, wie man vorgehen muss. Zu Beginn sollte man sich im Klaren sein, wie lang der String ist, den man sortieren möchte. Die Länge des Strings ist später ausschlaggebend für den Sortieralgorithmus. Gehen wir nun davon aus, dass wir den String "Eisenbahn" alphabetisch sortieren und mittels T-SQL ausgeben möchten.
Der String "Eisenbahn" besitzt eine Länge von genau neun Zeichen. Der Trick bei der Sortierung eines Strings mittels T-SQL ist, dass wir eine Sortierungstabelle als Sortieralgorithmus nutzen, um die Sortierung durchzuführen.
Sortierung eines Strings mittels T-SQL
Wir werden folgende Schritte durchführen, um ans Ziel zu gelangen:
- 3 T-SQL Variablen erstellen
- Sortierungstabelle aufbauen
- Sortierungstabelle befüllen
- T-SQL Variablen befüllen
- String mit T-SQL sortieren
- Ergebnis
3 T-SQL Variablen erstellen
DECLARE @input varchar(100) , @output varchar(100) , @len smallint;
Die Input-Variable beinhaltet das Wort "Eisenbahn", welches später alphabetisch sortiert werden soll.
Die Output-Variable beinhaltet zum Schluss die neue sortierte Zeichenkombination nach der Sortierung, die wir jetzt noch nicht verraten wollen.
Die Len-Variable enthält den numerischen Wert, welche die Länge des Wortes "Eisenbahn" zurückgibt, also neun Zeichen.
Sortierungstabelle aufbauen
IF OBJECT_ID('tempdb..#Numbers', 'U') IS NOT NULL; DROP TABLE tempdb..#Numbers; CREATE TABLE tempdb..#Numbers ( Number smallint IDENTITY(1, 1) PRIMARY KEY );
Das erste Statement IF OBJECT_ID prüft, ob die Tabelle bereits existiert und löscht sie gegebenenfalls. Anschließend wir die Tabelle Numbers erstellt.
Sortierungstabelle befüllen
WHILE 1 = 1 BEGIN INSERT INTO tempdb..#Numbers DEFAULT VALUES; IF @@IDENTITY = 9 BEGIN BREAK END END
Mit einer Schleife füllen wir die Sortierungstabelle mit der Anzahl von Default-Werten, welche auch die Länge des zu sortierenden Strings beträgt. Es werden nun neun Default-Werte in die Tabelle #Numbers eingetragen.
T-SQL Variablen befüllen
SET @input = 'EISENBAHN'; SET @output = ''; SET @len = LEN(@input);
Nun werden die Variablen mit Werten gefüllt. Wer die LEN-Funktion von SQL noch nicht kennt, kann hier nachlesen, welche Möglichkeiten die LEN-Funktion bietet.
String mit T-SQL sortieren!
SELECT @output = @output + TMP.VAL FROM ( SELECT TOP 9 SUBSTRING(@input, Number, 1) AS Val FROM tempdb..#Numbers (NOLOCK) WHERE Number <= @len ORDER BY Val ) TMP; SELECT @output;
Ergebnis
Nun sind alle Vorbereitungen abgeschlossen und der String kann mittels T-SQL sortiert werden.
Doch was passiert jetzt eigentlich genau? Der Input-String wir mittels der SUBSTRING-Funktion "Step by Step" aufgebrochen und mit Hilfe der Sortierungstabelle neu sortiert.
Das Ergebnis kann sich sehen lassen! Aus dem Wort "Eisenbahn" wird nach der Sortierung mittels T-SQL das Wort "ABEEHINNS" ausgegeben.
Komplettes Skript, um einen String mittels T-SQL zu sortieren
DECLARE @input varchar(100), @output varchar(100), @len smallint IF OBJECT_ID('tempdb..#Numbers', 'U') IS NOT NULL DROP TABLE tempdb..#Numbers CREATE TABLE tempdb..#Numbers ( Number smallint IDENTITY(1, 1) PRIMARY KEY ) WHILE 1 = 1 BEGIN INSERT INTO tempdb..#Numbers DEFAULT VALUES IF @@IDENTITY = 9 BEGIN BREAK END END SET @input = 'EISENBAHN' SET @output = '' SET @len = LEN(@input) SELECT @output = @output + TMP.VAL FROM ( SELECT TOP 9 SUBSTRING(@input, Number, 1) AS Val FROM tempdb..#Numbers (NOLOCK) WHERE Number <= @len ORDER BY Val ) TMP SELECT @output
Viel Spaß mit dem T-SQL Skript zum Sortieren eines Strings mittels T-SQL!