Letztes Vorkommen eines Zeichen

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

Antworten
Benutzeravatar
martin.koeditz
Beiträge: 443
Registriert: Sa 31. Mär 2018, 14:35

Hallo zusammen,

ich suche eine Möglichkeit, die Position des letzten Leerzeichens innerhalb einer Zeichenkette zu ermitteln. Also eine Suche "von rechts". Kennt jemand eine charmante Lösung hierfür?

Gruß
Martin
Martin Köditz
it & synergy GmbH
Benutzeravatar
andi
Beiträge: 12
Registriert: Fr 13. Mär 2020, 16:26

Hallo,

select position(' ' in reverse(<fieldname>))
fom <tablename>

LG A
Benutzeravatar
martin.koeditz
Beiträge: 443
Registriert: Sa 31. Mär 2018, 14:35

Hi Andi,

danke für den Tipp. Lege ich mir ab.

Gruß
Martin
Martin Köditz
it & synergy GmbH
Benutzeravatar
andi
Beiträge: 12
Registriert: Fr 13. Mär 2020, 16:26

Hallo Martin,

das SELECT war nicht ganz richtig, da POSITION auch wieder auch bei der verkehrten Zeichenkette bei 1 zu zählen beginnt, somit das Ergebnis noch von der Länge der Zeichenkette abgezogen und 1 addiert werden.

Hierzu ein Beispiel:

with test_table as
( select cast('Test 1' as varchar(20)) name1 from rdb$database
union all
select cast('Test 1 2 3 4' as varchar(20)) name1 from rdb$database
union all
select cast('Zeile 3 ' as varchar(20)) name1 from rdb$database
union all
select cast('Zeile4' as varchar(20)) name1 from rdb$database
)
select name1,
position(' ' in reverse(name1)) posvalue, char_length(name1) - position(' ' in reverse(name1)) + 1 pos_real,
substring(name1 from (char_length(name1) - position(' ' in reverse(name1)) + 1) for 1) test_1,
substring(name1 from (char_length(name1) - position(' ' in reverse(name1))) for 3) test_3,
case
when position(' ' in reverse(name1)) = 0 then 'not found'
else
'found at ' || (char_length(name1) - position(' ' in reverse(name1)) + 1)
end info
from test_table


LG A
Antworten