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 1 von 3  1 23      
fillibuster

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

Zeichen bei SELECT ignorieren

  Alt 29. Okt 2013, 12:26
Datenbank: SQLite • Version: 3.x • Zugriff über: Unidac
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!

Geändert von fillibuster (29. Okt 2013 um 12:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Zeichen bei SELECT ignorieren

  Alt 29. Okt 2013, 12:49
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Zeichen bei SELECT ignorieren

  Alt 29. Okt 2013, 12:56
@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
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
 
#4

AW: Zeichen bei SELECT ignorieren

  Alt 29. Okt 2013, 14:11
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
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Zeichen bei SELECT ignorieren

  Alt 29. Okt 2013, 14:17
Erstelle Dir in SQL eine Function, welche ein vergleichbares Format hervorbringt und nutze diese.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Zeichen bei SELECT ignorieren

  Alt 29. Okt 2013, 15:21
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.

BTW: Ich glaube beim Speichern von Telefonnumern gibt es min. 25 Ansichten, wie es richtig geht
dann schau mal hier herein.

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

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

AW: Zeichen bei SELECT ignorieren

  Alt 30. Okt 2013, 06:37
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));
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Zeichen bei SELECT ignorieren

  Alt 30. Okt 2013, 06:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.539 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Zeichen bei SELECT ignorieren

  Alt 30. Okt 2013, 07:32
Das stimmt so nicht ganz, aber der Aufwand dürfte abschrecken (Punkt 2.3).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#10

AW: Zeichen bei SELECT ignorieren

  Alt 30. Okt 2013, 09:14
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.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 06:30 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