Positionsbezogener SUBSTRING
In ihrer einfachen Positionsform (mit FROM
) gibt diese Funktion den Teilstring ab der Zeichenposition startpos zurück (das erste Zeichen ist 1).Ohne das Argument FOR
gibt es alle verbleibenden Zeichen in der Zeichenfolge zurück.Bei FOR
gibt es length Zeichen oder den Rest des Strings zurück, je nachdem welcher kürzer ist.
Seit Firebird 4.0 kann startpos kleiner als 1 sein.Wenn startpos kleiner als 1 ist, verhält sich Teilzeichenfolge so, als ob die Zeichenfolge 1 - startpos
zusätzliche Positionen vor dem eigentlichen ersten Zeichen an Position 1
hätte.Die Länge wird von diesem imaginären Anfang der Zeichenfolge aus betrachtet, sodass die resultierende Zeichenfolge kürzer als die angegebene Länge oder sogar leer sein kann.
Die Funktion unterstützt vollständig binäre und Text BLOB
s beliebiger Länge und mit jedem Zeichensatz.Wenn str ein BLOB
ist, ist das Ergebnis auch ein BLOB
.Bei jedem anderen Argumenttyp ist das Ergebnis ein VARCHAR
.
Bei Nicht-BLOB
-Argumenten entspricht die Breite des Ergebnisfelds immer der Länge von str, unabhängig von startpos und length.substring('pinhead' from 4 for 2)
gibt also ein VARCHAR(7)
zurück, das den String 'he'
enthält.
insert into AbbrNames(AbbrName)
select substring(LongName from 1 for 3) from LongNames;
select substring('abcdef' from 1 for 2) from rdb$database;
-- Ergebnis: 'ab'
select substring('abcdef' from 2) from rdb$database;
-- Ergebnis: 'bcdef'
select substring('abcdef' from 0 for 2) from rdb$database;
-- Ergebnis: 'a'
-- und NICHT 'ab', da "nichts" an Position 0 existiert
select substring('abcdef' from -5 for 2) from rdb$database;
-- Egebnis: ''
-- length endet vor dem eigentlichen Anfang des Strings