Problem mit internationalen Postleitzahlen in einer Abfrage

Fragen und Probleme rund um die Abfragespache SQL.

Problem mit internationalen Postleitzahlen in einer Abfrage

Beitragvon xrc7581 » Fr 10. Dez 2010, 14:37

Hallo,
ich bin ganz neu hier und habe in meinem aktuellen Projekt zum ersten Mal mit Postgres
zu tun.
Ausgangspunkt:
Ich überprüfe in einem Trigger, ob sich eine Postleitzahl in einem bestimmten Bereich befindet.Der Datentyp der Postleitzahl ist "varchar",da in England und anderen Ländern z.B. die Postleitzahl ein String ist(WA 234 etc.).

Meine Where-Klausel sieht wie folgt aus:
Code: Alles auswählen
 WHERE
    (plzvon <= NEW.plzvon AND NEW.plzvon <= plzbis)
    OR
    (plzvon <= NEW.plzbis AND NEW.plzbis <= plzbis);


Damit prüfe ich jetzt die Postleitzahlen, ob sie in einem bestimmten Bereich liegen.
Bei PLZs aus D,A,CH ist das noch recht einfach, aber sobald ein Buchstabe vorkommt,ist die Prüfung für die Katz...

Wie mache ich das am Besten ?

Meine Frage ist jetzt,wie ich z.B. englische Postleitzahlen prüfen kann,die als String dargestellt werden ?
Wie realisiere ich eine "Prüfung" nach Buchstaben ?
xrc7581
Neuer Benutzer
 
Beiträge: 5
Registriert: Fr 10. Dez 2010, 09:36

Beitragvon akretschmer » Fr 10. Dez 2010, 14:59

xrc7581 hat geschrieben:Hallo,
ich bin ganz neu hier und habe in meinem aktuellen Projekt zum ersten Mal mit Postgres
zu tun.
Ausgangspunkt:
Ich überprüfe in einem Trigger, ob sich eine Postleitzahl in einem bestimmten Bereich befindet.Der Datentyp der Postleitzahl ist "varchar",da in England und anderen Ländern z.B. die Postleitzahl ein String ist(WA 234 etc.).

Meine Where-Klausel sieht wie folgt aus:
Code: Alles auswählen
 WHERE
    (plzvon <= NEW.plzvon AND NEW.plzvon <= plzbis)
    OR
    (plzvon <= NEW.plzbis AND NEW.plzbis <= plzbis);


Damit prüfe ich jetzt die Postleitzahlen, ob sie in einem bestimmten Bereich liegen.
Bei PLZs aus D,A,CH ist das noch recht einfach, aber sobald ein Buchstabe vorkommt,ist die Prüfung für die Katz...

Wie mache ich das am Besten ?

Meine Frage ist jetzt,wie ich z.B. englische Postleitzahlen prüfen kann,die als String dargestellt werden ?
Wie realisiere ich eine "Prüfung" nach Buchstaben ?


Buchstaben rausschneiden (regexp_replace()), nach INT casten, fertig.

Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5938
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon achilles_69 » Fr 10. Dez 2010, 18:22

Btw. sollte man Postleitzahlen immer in einem varchar, bzw. text ablegen - auch wenn es sich nur um Adressen aus Deutschland handelt. Nur weil deutsche Postleitzahlen nur aus Ziffern aufgebaut sind, sind es noch lange keine Zahlen.

Wie sollte man sonst auch PLZ aus dem Gebiet "0" ablegen?
Und falls es Zahlen wären: was kriegt man denn raus, wenn man eine PLZ aus München zu einer PLZ von Hamburg hinzuaddiert?
achilles_69
Benutzer
 
Beiträge: 43
Registriert: Mi 5. Jul 2006, 10:56
Wohnort: Bielefeld

Beitragvon ads » Fr 10. Dez 2010, 19:13

Was bringt dir die Größer-/Kleinerprüfung an der Stelle? Damit kannst du auch falsche Werte erwischen, weil PLZen sich an keinem numerischen Systen orientieren und man damit keine numerischen Operationen durchführen kann und darf.

Du wirst dir für so etwas eigene Hilfsfunktionen schreiben müssen. Diese Funktionen können gleich auch schauen, aus welchem Land die PLZ ist und ob da ev. auch Buchstaben zu behandeln sind.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support
ads
Erfahrener Benutzer
 
Beiträge: 4147
Registriert: Mi 8. Feb 2006, 11:58
Wohnort: MD

Beitragvon xrc7581 » Mo 13. Dez 2010, 16:52

Hallo,vielen Dank für eure Antworten und Anregungen.
Ich werde mir ein paar Funktionen schreiben, damit ich auch später noch PLZs validieren kann.
xrc7581
Neuer Benutzer
 
Beiträge: 5
Registriert: Fr 10. Dez 2010, 09:36


Zurück zu SQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste