Seite 1 von 1

(gelöst) Abfrage nur nach Ziffern

Verfasst: Di 17. Mär 2015, 16:26
von Freischreiber
Hallo,

für eine Inverssuche unter meinen Telefonnummern hätte ich gerne eine Abfrage, die enthaltene Leerzeichen oder Bindestriche in Rufnummern ignoriert.

Beispiel: Die Handynummer 01715-123 456 789 soll auch gefunden werden, wenn man "5123" oder "56789" eingibt.

Der entsprechende Teil meiner Abfrage ist im Moment:

Code: Alles auswählen

 AND ( LOWER ( "Nummer" ) LIKE LOWER ( '%' || NULLIF ( :Nummernteil, '' ) || '%' ) ) 
, also vorne und hinten Wildcard hab ich schon, nur dazwischen ist es etwas störrisch... :lol:

Gruß
Freischreiber

Re: Abfrage nur nach Ziffern

Verfasst: Di 17. Mär 2015, 17:49
von Freischreiber
Hallo nikki,

LOWER hab ich drin, weil in derselben Tabelle alle Kontakte sind, auch Mailadressen, nach denen ich auch flexibel suchen möchte.
TRIM entfernt evtl. Leerzeichen
Bei mir nicht. Liegt vielleicht an der externen HSQL-DB. Es scheint auch, selbst wenn es geht, nur für Leerzeichen zu gehen. In meiner Tabelle sieht es aber wild aus, / und - kommen auch vor.

Danke trotzdem,
Freischreiber

Re: Abfrage nur nach Ziffern

Verfasst: Di 17. Mär 2015, 17:52
von RobertG
Hallo Freischreiber,

Du musst irgendwie die innenliegenden Leerzeichen (TRIM kümmert sich nur um die davor und dahinter) sowie andere Zeichen entfernen.

Code: Alles auswählen

AND REPLACE(REPLACE("Nummer",' ',''),'-','') LIKE '%' || :Nummernteil || '%'
Das LOWER hast Du, wenn ich Dich richtig verstehe, nur aus Gewohnheit drin - hier bringt es ja nichts, da keine Großschreibung vorhanden ist ...

Gruß

Robert

Re: Abfrage nur nach Ziffern

Verfasst: Di 17. Mär 2015, 19:22
von Freischreiber
Hallo Robert,

das LOWER ist eben deshalb, weil in der selben Tabelle alle Kontakte aufgelistet sind, auch Mailadressen, wo mal was großgeschrieben sein kann. Und manche Mailadressen sind so nichtssagend, daß sie wirklich eine Inverssuche brauchen.

Sehe ich es richtig, wenn ich mit REPLACE auch noch / (Schrägstriche) in Telefonnummern unterdrücken will, muß man dreifach schachteln?

Gruß
Freischreiber

Re: Abfrage nur nach Ziffern

Verfasst: Di 17. Mär 2015, 20:45
von RobertG
Hallo Freischreiber,
Freischreiber hat geschrieben: das LOWER ist eben deshalb, weil in der selben Tabelle alle Kontakte aufgelistet sind, auch Mailadressen, wo mal was großgeschrieben sein kann. Und manche Mailadressen sind so nichtssagend, daß sie wirklich eine Inverssuche brauchen.
Du meinst vermutlich nicht "Tabelle", sondern "Feld", das Du in diesem Fall nicht nur für Telefonnummern nutzt. Da Du aber tatsächlich nur nach einer Ziffernfolge suchst kann doch die Kleinschreibung nichts bewirken, oder?
Freischreiber hat geschrieben: Sehe ich es richtig, wenn ich mit REPLACE auch noch / (Schrägstriche) in Telefonnummern unterdrücken will, muß man dreifach schachteln?
Genau, alles, was raus soll, kannst Du so herauslöschen, bevor Du nach einer Ziffernfolge suchst.

Gruß

Robert

Re: Abfrage nur nach Ziffern

Verfasst: Do 19. Mär 2015, 19:07
von Freischreiber
Hallo Robert,

richtig, es gibt ein Feld, das für Rufnummern und Mailadressen genutzt wird, die nach einem weiteren Feld, Nummern-ID, unterschieden werden.

Aber ich sehs ein, nach T-online-Mailadressen kann ich mit dieser Abfrage sowieso nicht mehr suchen, da muß eine zweite Abfrage her...

Funktioniert aber gut, danke!

Gruß
Freischreiber

Re: Abfrage nur nach Ziffern

Verfasst: Mo 10. Aug 2015, 16:35
von Freischreiber
So, jetzt habe ich auch die Inverssuche nach Rufnummern oder Mailadressen mit einem Formularfilter statt mit einer Parameterabfrage realisiert, mit diesem Makro:

Code: Alles auswählen

Sub Formularfilter_Inverssuche(oEvent AS OBJECT)
	oForm = thisComponent.Drawpage.Forms.getByName("Form_Inverssuche") 'Das Formular beruht auf einer Abfrage aller Kontakt-Datensätze.
	oFeld = thisComponent.Drawpage.Forms.getByName("Form_Inverssuche").getByName("txtFiltertext")
	stSuchtext = LCASE(oFeld.text) 'ermöglicht Großbuchstaben in Suchfeld
	oForm.Filter = "LCASE(Nummer) LIKE '%"+stSuchtext+"%' OR REPLACE(REPLACE(REPLACE(LCASE(Nummer), ' ', '' ), '-', '' ), '/', '' ) LIKE '%"+stSuchtext+"%'" 'Mit Leerzeichen- und Zwischenstrichoption
	'Spaltennamen können auch doppelt maskiert werden (""Nachname"")
	oForm.reload
End Sub
Durch das OR werden sowohl zusammenhängende Zeichenketten wie "...@t-online.de" gefunden als auch Rufnummern, bei denen der - Strich stört wie "089-08150816" bei dem Suchtext "0890". Hätte ich auch gleich drauf kommen können :?