SQL: Eine Zeichenkette in einzelne Zeichen zerlegen

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Um eine Zeichenkette auftrennen zu können, stellen die meisten SQL-Dialekte eine Funktion wie substr() oder substring() zur Verfügung. In Jet-SQL kann die Funktion Mid() zur Zerlegung von Zeichenketten verwendet werden.

Lösung für Jet-SQL

Hinweis für Access-Anwender
Um die folgenden Abfragen selbst testen zu können, muss die Pivivottabelle t1000 in der Datenbank vorliegen.


Um genügend Datensätze für jedes Zeichen bereitzustellen, wird in den folgenden Abfragen eine Pivottabelle verwendet. Die Anzahl der Datensätze wird über die Länge der Zeichenkette bestimmt.

SELECT Mid( 'DBWIKI', 1 + n, 1 ) AS alpha
FROM   t1000
WHERE  n < Len( 'DBWIKI' )

Das Resultut der Abfrage ist dann:

alpha
D
B
W
I
K
I

Als Variation könnte man auch die Länge der auszugebenden Zeichenkette (von vorn oder hinten beginnend) beeinflussen,

SELECT Mid( 'DBWIKI', Len('DBWIKI') - n) AS alpha,
       Mid( 'DBWIKI', n + 1) AS beta
FROM   t1000
WHERE  n < Len( 'DBWIKI' )

was dann zu diesem Ergebnis führt:

alpha beta
I DBWIKI
KI BWIKI
IKI WIKI
WIKI IKI
BWIKI KI
DBWIKI I

Anmerkung
Die gezeigten Variationen lassen sich auch mit den Funktionen Left() und Right() erstellen.

Lösung für PostgreSQL

SELECT SUBSTRING( 'DBWIKI' FROM n FOR 1 ) AS alpha
FROM   generate_series( 1, LENGTH( 'DBWIKI' ) ) AS n
SELECT SUBSTRING( 'DBWIKI' FROM LENGTH( 'DBWIKI' ) - n + 1 ) AS alpha,
       SUBSTRING( 'DBWIKI' FROM n ) AS beta
FROM   generate_series( 1, LENGTH( 'DBWIKI' ) ) AS n

Dieser DBFiddle zeigt das Ergebnis dieser Umsetzung.

Lösung für SQLite3

WITH RECURSIVE len ( n ) AS (
    SELECT 1
    UNION  ALL
    SELECT n + 1
    FROM   len
    LIMIT  LENGTH('DBWIKI') 
)
SELECT substr('DBWIKI', n, 1) AS alpha
FROM   len
WITH RECURSIVE len ( n ) AS (
    SELECT 1
    UNION  ALL
    SELECT n + 1
    FROM   len
    LIMIT  LENGTH('DBWIKI') 
)
SELECT substr( 'DBWIKI', LENGTH( 'DBWIKI' ) - n + 1 ) AS alpha,
       substr( 'DBWIKI', n ) AS beta
FROM   len

In diesem DBFiddle kann das Ergebnis dieser Abfragen eingesehen werden.



Zurück zur Übersicht