Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Zeichen bei SELECT ignorieren (https://www.delphipraxis.net/177280-zeichen-bei-select-ignorieren.html)

fillibuster 29. Okt 2013 12:26

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!

Sharky 29. Okt 2013 12:49

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.

p80286 29. Okt 2013 12:56

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

fillibuster 29. Okt 2013 14:11

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 ;-)

joachimd 29. Okt 2013 14:17

AW: Zeichen bei SELECT ignorieren
 
Erstelle Dir in SQL eine Function, welche ein vergleichbares Format hervorbringt und nutze diese.

p80286 29. Okt 2013 15:21

AW: Zeichen bei SELECT ignorieren
 
Zitat:

Zitat von fillibuster (Beitrag 1233656)
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?

Dann schau mal nach was Dein SQL-Dialekt her gibt. Je nachdem werden z.B. solche Konstrukte unterstützt:
Code:
select irgendwas
from meinetabelle
where satz like '['+','-']['0'..'9']__%'
das könnte weiter helfen.

Zitat:

Zitat von fillibuster (Beitrag 1233656)
BTW: Ich glaube beim Speichern von Telefonnumern gibt es min. 25 Ansichten, wie es richtig geht ;-)

dann schau mal hier herein.

Gruß
K-H

baumina 30. Okt 2013 06:37

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));

Furtbichler 30. Okt 2013 06:49

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:
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;
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.

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.

DeddyH 30. Okt 2013 07:32

AW: Zeichen bei SELECT ignorieren
 
Das stimmt so nicht ganz, aber der Aufwand dürfte abschrecken (Punkt 2.3).

Jumpy 30. Okt 2013 09:14

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 21:57 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz