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
Letztes Vorkommen eines Zeichen
Moderator: thorben.braun
- martin.koeditz
- Beiträge: 500
- Registriert: Sa 31. Mär 2018, 14:35
Martin Köditz
SynDesk SW GmbH
SynDesk SW GmbH
- martin.koeditz
- Beiträge: 500
- Registriert: Sa 31. Mär 2018, 14:35
Hi Andi,
danke für den Tipp. Lege ich mir ab.
Gruß
Martin
danke für den Tipp. Lege ich mir ab.
Gruß
Martin
Martin Köditz
SynDesk SW GmbH
SynDesk SW GmbH
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
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