![]() |
Datenbank: SQLite • Version: 3.x • Zugriff über: Unidac
Zeichen bei SELECT ignorieren
Hallo,
ist es möglich mit SQL eine Abfrage über String-Felder zu machen und dabei bestimmte Zeichen zu ignorieren bzw. nur nach Zahlen zu suchen? Konkret geht es mir darum in Telefonnummern zu suchen. Die Nummer inkl. Vorwahl bekomme ich ohne führende Null als reine Zahlenzeichenkette. In der DB sind aber auch Zeichen (+/...) abgespeichert. Danke! |
AW: Zeichen bei SELECT ignorieren
Hai fillibuster,
ich würde nicht versuchen zeichen zu ignorieren sondern die Daten in der Tabelle in eine vernünftige Form zu bringen. Also drei Felder für eine Telefonnumemer LKZ - Landeskennzahl ohne nullen oder so (z.B. 49 für Deutschland, 1 für USA/Nordamerika, 44 für England) OKZ - Ortskennzahl auch ohne nullen (z.B. 89 für München, 69 für Frankfurt) Nummer - Die Nummer des Teilnehmers. Dann kannst Du vernünftig suchen. Anstelle der LKZ würde es sich auch anbieten eine Tabelle mit allen LKZ anzulegen und bei dem "Kontakt" dan nur die ID der LKZ aus der Tabelle zu verwenden. |
AW: Zeichen bei SELECT ignorieren
@Sharky
Da träumt aber manche "prof. Personen Daten Verwaltung" von. @fillibuster eine andere Möglichkeit wäre es die Tel.Nummern gleich richtig zu speichern: +49 811 1234567 Gruß K-H |
AW: Zeichen bei SELECT ignorieren
Hallo,
die Tabelle jetzt noch umzuformen ist nicht möglich. Die einzige Möglichkeit, die in der Richtung funktionieren würde, wäre ein zusätzliches Feld und alle Nummern bereinigt eintragen. Das ist selbst aber für den konkreten Fall viel zu umständlich, deshalb: gibt es eine Möglichkeit mit SQL Nummern zu suchen und dabei alle anderen Zeichen zu ignorieren? Viele Grüße ... BTW: Ich glaube beim Speichern von Telefonnumern gibt es min. 25 Ansichten, wie es richtig geht ;-) |
AW: Zeichen bei SELECT ignorieren
Erstelle Dir in SQL eine Function, welche ein vergleichbares Format hervorbringt und nutze diese.
|
AW: Zeichen bei SELECT ignorieren
Zitat:
Code:
das könnte weiter helfen.
select irgendwas
from meinetabelle where satz like '['+','-']['0'..'9']__%' Zitat:
![]() Gruß K-H |
AW: Zeichen bei SELECT ignorieren
Ich bereite mir den Suchstring für die Telefonnummer, die von der Telefonanlage kommt folgendermaßen auf, um sie dann in meiner Datenbank zu suchen:
Delphi-Quellcode:
for i := 1 to Length(TelNr) do
begin SuchTel := SuchTel + '%' + TelNr[i]; end; SuchTel := SuchTel + '%'; lSQL.Add('WHERE Telefon1 like ' + StrToSQL(SuchTel)); lSQL.Add(' OR Telefon2 like ' + StrToSQL(SuchTel)); lSQL.Add(' OR MobilTel like ' + StrToSQL(SuchTel)); |
AW: Zeichen bei SELECT ignorieren
Das bringt doch nichts, wenn die gespeicherte Nummer z.B. '01 23 45' lautet und Du nach '012345' suchst.
Da SQLLite verwendet wird, scheint die Datenmenge nicht sonderlich groß zu sein. Also alles in den Speicher, dann suchen und fettig.
Delphi-Quellcode:
Sind halt 2 Queries. Die erste Query liefert alle Telefonnummern und die Record-ID. Dann wird eine Liste von IDs der Records erzeugt, deren Telefonnummer past und anschließend werden nur diese Records gelesen.
Query.Text := 'Select ID,Telefonnummer from Tabelle';
Query.Open(); While not Query.EOF do begin if PhoneNumberMatches(MySearchString, Query['Telefonnummer']) Then Results := Results + Query['ID']+','; Query.Next; End; if Results<>'' then begin setlength (Results, Length (Results) - 1); Query.Close; Query.Text := 'Select * from Tabelle where ID in ('+Results+')'; Query.Open; Mit einem anderen RDBMS kann man sich eine mehr oder minder komplexe Funktion (UDF) erstellen, das Matchen übernimmt, aber mit SQLite geht das eben nicht. |
AW: Zeichen bei SELECT ignorieren
Das stimmt so nicht ganz, aber der Aufwand dürfte abschrecken (
![]() |
AW: Zeichen bei SELECT ignorieren
Nicht schön aber selten, könnte es vllt. nur in SQL auch so gehen:
SELECT * FROM Tabelle WHERE replace(replace(replace(replace(Telefonnumer,'+',' '),'-',''),'/',''),' ','') LIKE '%12345%' Das ist jetzt wie man das in Oracle machen könnte. Laut der Doku im Link von DeddyH kennt SQL zumindest eine replace Funktion. Keine Ahnung was man bei SQL Light für Platzhalterzeichen statt % verwendet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz