von RobertG » Mo, 11.03.2019 17:45
Hallo Tom,
sicher, dass die Zusammenstellung von regulären Ausdrücken bei LIKE klappt? Mit der internen HSQLDB dürfte das nicht funktionieren, da LIKE nur auf Text zugreift und dort mit "_" ein Zeichen und mit "%" beliebig viele Zeichen zulässt. Es gibt dort lediglich die Möglichkeit, über den Zusatz ESCAPE dafür zu sorgen, dass das entsprechende Zeichen selbst ggf. auch gefunden werden kann.
Deine Variante gibt es z.B. bei MySQL als REGEXP bzw. RLIKE, nicht aber bei der internen HSQLDB.
Select * FROM "Firma" WHERE "Telefon" LIKE '0%7%1%6%1' ORDER BY "Firmenname" ASC, "Abteilung" ASC
liefert u.a. einen Datensatz mit Telefon 0711-93..., den ich mir nicht erklären kann.
Das liegt vermutlich daran, dass nach der 0 beliebig viele Zeichen vorkommen können, dann eine 7, dann wieder beliebig viele Zeichen und anschließend eine 1. Die nächste '1' wird wohl irgendwo weiter hinten in der Nummer vorkommen, weil vorher eine '6' stehen muss, die wir hier nicht sehen.
Die neue interne Firebird-Datenbank von LibreOffice hat hier mit SIMILAR TO entsprechende Möglichkeiten, auch reguläre Ausdrücke zu verarbeiten. Ich weiß aber nicht, ob Stephan diese DB nutzt.
Für mich liegt das Problem daran, dass die Daten eben nicht standardisiert abgelegt wurden. Das wäre die einfachste Möglichkeit gewesen, dafür ein numerisches Feld zu nutzen. Jetzt hilft wohl nur die Methode, möglichst viele Treffer über REPLACE zu erzeugen - und schnellsten die Eingabe umzustellen.
Gruß
Robert
Hallo Tom,
sicher, dass die Zusammenstellung von regulären Ausdrücken bei LIKE klappt? Mit der internen HSQLDB dürfte das nicht funktionieren, da LIKE nur auf Text zugreift und dort mit "_" ein Zeichen und mit "%" beliebig viele Zeichen zulässt. Es gibt dort lediglich die Möglichkeit, über den Zusatz ESCAPE dafür zu sorgen, dass das entsprechende Zeichen selbst ggf. auch gefunden werden kann.
Deine Variante gibt es z.B. bei MySQL als REGEXP bzw. RLIKE, nicht aber bei der internen HSQLDB.
[quote]Select * FROM "Firma" WHERE "Telefon" LIKE '0%7%1%6%1' ORDER BY "Firmenname" ASC, "Abteilung" ASC
liefert u.a. einen Datensatz mit Telefon 0711-93..., den ich mir nicht erklären kann.[/quote]
Das liegt vermutlich daran, dass nach der 0 beliebig viele Zeichen vorkommen können, dann eine 7, dann wieder beliebig viele Zeichen und anschließend eine 1. Die nächste '1' wird wohl irgendwo weiter hinten in der Nummer vorkommen, weil vorher eine '6' stehen muss, die wir hier nicht sehen.
Die neue interne Firebird-Datenbank von LibreOffice hat hier mit SIMILAR TO entsprechende Möglichkeiten, auch reguläre Ausdrücke zu verarbeiten. Ich weiß aber nicht, ob Stephan diese DB nutzt.
Für mich liegt das Problem daran, dass die Daten eben nicht standardisiert abgelegt wurden. Das wäre die einfachste Möglichkeit gewesen, dafür ein numerisches Feld zu nutzen. Jetzt hilft wohl nur die Methode, möglichst viele Treffer über REPLACE zu erzeugen - und schnellsten die Eingabe umzustellen.
Gruß
Robert