Hi,
in AutoIt lässt sich bei StringInStr() mit -1 im Parameter für Vorkommen von rechts suchen.
Ich suche für Firebird-SQL eine solche Variante.
Wir haben leider Adressangaben mit: Vorname Zuname in einem Datenfeld. Manchmal benötige ich aber beides getrennt. Momentan nutze ich folgendes Query:
select
substrex( name1, pos(" ",name1)+1, 256 ) NAME,
substrex( name1, 1, pos(" ",name1)-1 ) VORNAME
from
kunden
where
kundennr = 10000
Interne Funktionen:
substrex ( sString, iStartPos, iCount ) gibt iCount Zeichen ab iStartPos zurück
pos ( sSearch, sString) gibt Integer Position von sSearch zurück
Ich kann somit nur das erste Leerzeichen verwerten. Für viele Namen ist das ausreichend, aber wenn z.B. Doppelvornamen ohne Bindestrich existieren oder auch ein Titel, dann gehts in die Hose. Eine bessere Treffergröße hätte ich bei Abfrage des letzten Leerzeichens.
Gibt es evtl. Workarounds, die das StringInStr simulieren können?
Ich hatte schon überlegt (mangels Möglichkeit von Schleifen) eine gestaffelte Abfrage zu erstellen, die die Leerzeichenposition des letzten Querys als Start im nächsten nimmt. Mehr als 5 Leerzeichen sind nicht zu erwarten, also wäre das auch nicht zu verschachtelt - aber wie kann ich anweisen, dass bei Positionsergebnis 0 auf das Ergebnis des vorigen Schrittes zugegriffen werden soll?
Bin für jede Idee dankbar.
EDIT: Als Hinweis - ich verwende Firebird Version 1.5, die Funktion IIF (funktioniert wie ein Ternärer Operator) gibt es erst ab Version 2.0