AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Zeichen bei SELECT ignorieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichen bei SELECT ignorieren

Ein Thema von fillibuster · begonnen am 29. Okt 2013 · letzter Beitrag vom 31. Okt 2013
Antwort Antwort
Seite 2 von 3     12 3      
Furtbichler
(Gast)

n/a Beiträge
 
#11

AW: Zeichen bei SELECT ignorieren

  Alt 30. Okt 2013, 11:43
Das stimmt so nicht ganz, aber der Aufwand dürfte abschrecken (Punkt 2.3).
Nett. Aber ne SQL-UDF ist das tropsdem nich.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#12

AW: Zeichen bei SELECT ignorieren

  Alt 30. Okt 2013, 11:57
Ich hatte vor einiger Zeit ebenfalls das Vergnügen mich mit Telefonnummern herum zu schlagen.
Nach einer Woche Hampelei mit Berücksichtigung von deutschen,amerikanischen,englischen und Sekretärinenvorlieben (alles natürlich wohlbegründet und jede Änderung ein Verstoß gegen die Menschenrechte) hat ein netter Mensch mit der Faust auf den Tisch gehauen, und ein Standardformat definiert. Die Umstellung war nach 2 Stunden (mit Delphi) erledigt.
Jetzt läuft jede Woche eine Prüfabfrage die eine Fehlerliste generiert und gut ist.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#13

AW: Zeichen bei SELECT ignorieren

  Alt 30. Okt 2013, 13:53
Hi,

erstmal danke für eure Antworten. Da teste ich mir das Passende raus. Hatte gestern festgestellt, dass die folgende Abfrage auch funktioniert:
Code:
SELECT * FROM contact WHERE phone LIKE '%3%0%1%2%3%4%5%6'
für z. B. +49 (30) 123 456. Ist ja bald Halloween *grusel*

Viele Grüße ...
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Zeichen bei SELECT ignorieren

  Alt 30. Okt 2013, 14:11
Hi,

erstmal danke für eure Antworten. Da teste ich mir das Passende raus. Hatte gestern festgestellt, dass die folgende Abfrage auch funktioniert:
Code:
SELECT * FROM contact WHERE phone LIKE '%3%0%1%2%3%4%5%6'
für z. B. +49 (30) 123 456. Ist ja bald Halloween *grusel*

Viele Grüße ...
Das entspricht dann meiner Lösung, nur gebe ich hinter der 6 auch noch ein % mit.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#15

AW: Zeichen bei SELECT ignorieren

  Alt 30. Okt 2013, 14:21
Hi,
Das entspricht dann meiner Lösung, nur gebe ich hinter der 6 auch noch ein % mit.
Stimmt, hatte aber erst gar nicht gedacht, dass so ein SQL Konstrukt funktioniert

Danke euch
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#16

AW: Zeichen bei SELECT ignorieren

  Alt 30. Okt 2013, 21:13
Code:
SELECT * FROM contact WHERE phone LIKE '%3%0%1%2%3%4%5%6'
für z. B. +49 (30) 123 456.
Und +301 72-3147596 passt auch
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Zeichen bei SELECT ignorieren

  Alt 31. Okt 2013, 06:09
Code:
SELECT * FROM contact WHERE phone LIKE '%3%0%1%2%3%4%5%6'
für z. B. +49 (30) 123 456.
Und +301 72-3147596 passt auch
Aber die Ergebnismenge bleibt überschaubar und kann zur Not nochmal genauer betrachtet werden.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#18

AW: Zeichen bei SELECT ignorieren

  Alt 31. Okt 2013, 06:26
Aber die Ergebnismenge bleibt überschaubar und kann zur Not nochmal genauer betrachtet werden.
Das muß nicht 'zur Not' genauer betrachtet werden, sondern in jedem Fall. Und wenn Du dich darauf verlässt...nun ja. Wenn die Stecknadel in einer Handvoll Heu steckt, ist sie immer noch schwer zu finden.

Ich stehe auf dem Standpunkt, das ein Problem, das ordentlich lösbar ist, auch ordentlich gelöst werden sollte.

PS: Als Lösung für die Eingabe kompletter Telefonnummern mag es als Notbehelf durchgehen, ich würde die paar Daten (da sie ja überschaubar sind) trotzdem in-Memory filtern, und dann richtig.

Geändert von Furtbichler (31. Okt 2013 um 06:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Zeichen bei SELECT ignorieren

  Alt 31. Okt 2013, 06:35
Ich habe in meiner Datenbank das Problem, dass ein und die selbe Telefonnummer mehr als einmal in der Datenbank drin stehen kann.

z.B.
1. Hans Müller als Kunde mit Telefonnummer
2. Hans Müller als Ansprechpartner seiner Firma mit Privatnummer
3. Hans Müller als Ansprechpartner seiner 2. Firma mit Privatnummer
usw....

Sollte nun unser Telefon klingeln, und Hans Müller ruft von seinem Privattelefon an, wird's spannend
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#20

AW: Zeichen bei SELECT ignorieren

  Alt 31. Okt 2013, 07:14
Namen sind nicht eindeutig, Telefonnummern schon (eher).

Ich sagt bereits, das dein Vorschlag als Notbehelft zu gebrauchen ist. Aber nur, wenn die Telefonnummern geeignet abgelegt ist. Und was ist morgen?

Konkret: Dein Vorschlag wird umgesetzt und alle sind zufrieden, denn er funktioniert für die aktuelle Problemstellung: Suche nach vollständiger(!) Telefonummer über die derzeit gespeicherten Nummern (die z.B. nach E.123 abgelegt sind).

Morgen werden jedoch die Outlook-Kontakte importiert und dort wird die Telefonnummer nach dem MS-Standard abgelegt, also +49(30)12345678 (in der DB sind sie jedoch im Format (030)12345678 abgelegt. Ja und dann ruft Hans Müller an, seine Nummer 03012345678 erscheint im Display und deine Suche findet -nichts-. Der Sachbearbeiter kann den Kunden nicht zuordnen und legt ihn im schlimmsten Fall neu an.

Irgendwann wird dann vergessen, das die Lösung erstens nicht immer das korrekte Ergebnis anzeigt, zweitens nur taugt, wenn man die zu suchende Telefonnummer vollständig angibt und drittens doch nur mit einem bestimme Format funktioniert, also eben z.B. nur E.123, aber nicht mit anderen Standards. Und spätestens dann ist die Suche keine Suche sondern ein Glücksspiel.

Deine Lösung zeigt also nicht nur zu viele an (was zu verschmerzen wäre), sondern ist leider unzuverlässig. Und damit imho so nicht zu gebrauchen.

PS: Mein Beispiel funktioniert auch, wenn die Nummern nur im MS-Format abgelegt sind, also mit internationaler Vorwahl, jedoch ohne führende Null in der Ortsvorwahl. Denn es gibt generell mindestens vier unterschiedliche Formatgruppen, die hinsichtlich der einfache Suche disjunkt sind:
Ortsvorwahl: (30) vs. (030).
Landeskennzahl: +49 vs. 0049 vs. ganz weglassen.

Wie Du siehst, wird es nie zuverlässig funktionieren, so elegant und kurz dein Vorschlag auch ist.

Ein Suchalgorithmus muss robust gegen alle Kombinationen sein, d.h. er muss die gespeicherten und die Such-Telefonnummer in LKZ, OnKZ und Rufnummer unterteilen und dann vergleichen.

Richtig richtig macht man es imho nur dann, wenn die Telefonnummern normalisiert abgelegt werden. Alles andere ist Murks.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 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