🏠 » Blog » SQL, T-SQL und PL/SQL » String mit T-SQL sortieren

String mit T-SQL sortieren

String mit T-SQL sortieren | Datenbank Blog

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:

  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 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!