Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ruffnummer aus der Tabelle Suchen mit möglichen zeichen.. (https://www.delphipraxis.net/79672-ruffnummer-aus-der-tabelle-suchen-mit-moeglichen-zeichen.html)

Karstadt 26. Okt 2006 10:40

Datenbank: MYSQL • Version: 4 • Zugriff über: MYDAC

Ruffnummer aus der Tabelle Suchen mit möglichen zeichen..
 
Hallo.

Habe ein Feld Telefonnummer (String).

Nun kann in diesen Feld folgendes stehen:

0451-1111111
oder
04951-11111111
oder
+004951-1111111
oder 0451 - 11 11 11 11 1
oder sonst was..

Nun möchte ich nach diese Nummer suchen 04511111111 wie kann ich das realisieren

nach möglichkeit per SQL. (Das sin ca. 100 DS)

Angel4585 26. Okt 2006 10:41

Re: Ruffnummer aus der Tabelle Suchen mit möglichen zeichen.
 
du musst denke ich nacheinander nach jedem einzelnen Zeichen suchen

hoika 26. Okt 2006 10:45

Re: Ruffnummer aus der Tabelle Suchen mit möglichen zeichen.
 
Hallo,

mit Standard-SQL bekommst du das nicht hin (LIKE kann sowas nicht).
Falls du das auf dem Server suchen musst, kannst du nur eine Stored Procedure nehmen,
die jeden Datensatz abklappert und intern (kompliziert) über substring die
Zeichen '-', ' ' usw. ausfiltert, dann eine Telefonnummer bastelt und dann vergleicht.


Heiko

dataspider 26. Okt 2006 10:52

Re: Ruffnummer aus der Tabelle Suchen mit möglichen zeichen.
 
Hi,

Wenn man das Statement im Code basteln kann, müsste es in etwa so aussehen:

SQL-Code:
  ... where telefonnummer like '%4%5%1%1%1%1%1%1%1%1%';
Besser wäre natürlich, mann würde die Nummer über einen Trigger formatiert in einem 2. Feld ablegen.
Aber wie das bei MySQL funktioniert, weiss ich nicht.

Cu, frank

shmia 26. Okt 2006 10:59

Re: Ruffnummer aus der Tabelle Suchen mit möglichen zeichen.
 
Du könntest die Telefonnummer in zwei Felder abspeichern:
Formatiert (0451-1111111) und nur als Ziffernfolge (04511111111)
Beim Suchen entfernst du alle Sonderzeichen und suchst nur nach der Ziffernfolge.
Für die internat. Vorwahl (z.B. +49) musst du dir noch zusätzlich Gedanken machen.

Karstadt 26. Okt 2006 11:46

Re: Ruffnummer aus der Tabelle Suchen mit möglichen zeichen.
 
shmia Diese lösung ist mir auch lieber. (während der Pause bin ich auch auf diese Lösung gekommen) ;)

ObBeforPost wird mir die integerzahlen in einen extrafeld abspeichern...

Danke für ihre Hilfe.

Karstadt 26. Okt 2006 12:18

Re: Ruffnummer aus der Tabelle Suchen mit möglichen zeichen.
 
Delphi-Quellcode:
Function TForm1.GibNummerAusString(Nr:String):String;
var i, tr_i: Integer;
    Nummer:String;
begin
  Nummer := '';

  for i := 1 to Length(Nr) do
  begin
    If TryStrToInt(Nr[i],tr_i) Then Nummer := Nummer + Nr[i];
  end;

  Result := Nummer;
end;
nun habe ich alles.. um die Abfrage mache ich mir nun keine Sorgen mehr... :)

shmia 26. Okt 2006 13:15

Re: Ruffnummer aus der Tabelle Suchen mit möglichen zeichen.
 
Denk daran, dass ein 32Bit integer nur bis 2147483647 reicht; also nur 9 bis 10 Ziffern aufnehmen kann.
Nimm besser folgende Funktion:
Delphi-Quellcode:
// kopiert aus der JCL
function StrKeepChars(const S: string; const Chars: TSysCharSet): string;
var
  Source, Dest: PChar;
  Len, Index: Integer;
begin
  Len := Length(S);
  SetLength(Result, Len);
  UniqueString(Result);
  Source := PChar(S);
  Dest := PChar(Result);
  for Index := 0 to Len-1 do
  begin
    if Source^ in Chars then
    begin
      Dest^ := Source^;
      Inc(Dest,SizeOf(Char));
    end;
    Inc(Source,SizeOf(Char));
  end;
  SetLength(Result, (Longint(Dest) - Longint(PChar(Result))) div SizeOf(Char));
end;

telnr_ohne_sonderzeichen := StrKeepChars(telnr, ['0'..'9']);

Karstadt 26. Okt 2006 13:21

Re: Ruffnummer aus der Tabelle Suchen mit möglichen zeichen.
 
Delphi-Quellcode:
If TryStrToInt(Nr[i],tr_i) Then Nummer := Nummer + Nr[i];
Es wird nur 1 zeichen überprüft... ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 Uhr.

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