bfuerchau hat geschrieben: Mi 2. Dez 2020, 09:44
Similar entspricht ja nur, durch RegEx, einem erweiterten "LIke".
Damit kann man also nur feststellen, ob der gesuchte Ausdruck enthalten ist.
ich habe doch von substring mit similar gesprochen. Damit
kann man einen Teilstring extrahieren.
bfuerchau hat geschrieben: Mi 2. Dez 2020, 09:44
Anscheinend hat sich noch keiner wirklich damit beschäftigt und entsprechende Funktionen ins Netz gestellt.
Die Projekte, die ich finde, sind z.T. von FB 1.0 (2003) oder hören 2010 auf.
auch das hab ich erwähnt, steht im Firebird 3 Installationsverzeichnis, genauer gesagt in \doc\sql.extensions\README.substring_similar.txt und ist von Mai 2013. Darin finden sich die folgenden Beispiele und darüber etwas Syntaxdefinition. Diese Art von substring-Verwendung geht schon in die Richtung, die Martin braucht (Inhalt aus einem String mit bekanntem Format extrahieren, zb Telefonnr).
Code: Alles auswählen
substring('abcabc' similar 'a#"bcab#"c' escape '#') -- bcab
substring('abcabc' similar 'a#"%#"c' escape '#') -- bcab
substring('abcabc' similar '_#"%#"_' escape '#') -- bcab
substring('abcabc' similar '#"(abc)*#"' escape '#') -- abcabc
substring('abcabc' similar '#"abc#"' escape '#') -- <null>
Meine Tests waren u.a. die folgenden. Aber zu mehr als mir den ersten Zahlenbereich der Telnr ins Ergebnis extrahieren konnte ich meine Test-Expressions nicht bewegen. Dazu sagt die Doku zu wenig.
Code: Alles auswählen
select substring('abcabc' similar 'a#"bcab#"c' escape '#') xx,
substring('abc123abc456' similar 'abc#"[0-9]*#"abc' escape '#') num,
substring('abc123abc456' similar '%#"[0-9]+#"%' escape '#') num2,
substring('+49.511 1234 567' similar '#+?#"[0-9]+#"%' escape '#') num3,
substring('+49.511 1234 567' similar '#+?#"[0-9]+_[0-9]+#"%' escape '#') num4
from rdb$database
Wem das weiterhilft, der kann ja gerne weitere Erkenntnisse hier reinstellen. Ich hatte keine Lust mehr, rumzuprobieren.
Grüße, Volker