Datenbank Blog » SQL, T-SQL und PL/SQL

String mit T-SQL sortieren

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 9 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:

  1. 3 T-SQL Variablen erstellen
  2. Sortierungstabelle aufbauen
  3. Sortierungstabelle befüllen
  4. T-SQL Variablen befüllen
  5. String mit T-SQL sortieren
  6. 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 9 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 9 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!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.