Zum Inhalt springen

Nach Postleitzahlbereichen suchen?


Empfohlene Beiträge

Geschrieben

Hi!

Hab folgendes Problem. Ich möchte den Usern die Möglichkeit bieten, in einer Adressdatenbank nach Postleitzahlen zu suchen. DB ist Oracle. Die Eingabe des Benutzers soll ungefähr so aussehen: 555**, 66***

D.h. er sucht nun nach Postleitzahlen, die mit 555 oder 66 beginnen. Soweit ist auch die Abfrage klar:

SELECT f.name, f.firmenid, f.postleitzahl, f.ort

FROM firmen f

WHERE ((f.postleitzahl like '555%') OR (555=0))

OR ((f.postleitzahl like '66%') OR (66=0));

Mein Postleitzahlfeld ist Integer. Nun ist ja der Parameter des Postleitzahlsuchfeldes "555**, 66***". Gibt es nun die Möglichkeit, mit Hilfe dieses Parameters zu suchen?

In etwa so:

SELECT f.name, f.firmenid, f.postleitzahl, f.ort

FROM firmen f

WHERE f.postleitzahl IN (555**,66***);

Oder muss ich den Parameter erst auseinanderfrimeln und die Abfrage dann in die erste Form bringen?

Gruß dorti

Geschrieben

Tja, mit der ersten Abfrage krieg ich auch so welche. Aber Postleitzahlen mit Nullen an erster Stelle gibt es bei mir nicht, die sind dann vierstellig.

Darum geht es mir ja auch net so. Ich dachte an eine Abfrage, die LIKE mit IN kombiniert. Gibt es so irgendwas?

Gruß dorti

Geschrieben
Original geschrieben von dorti

Mein Postleitzahlfeld ist Integer.

Warum denn das?

Du magst Sachsen nicht, gelle, denn die haben vorne eine "0"?

PS: Postleitzahl wäre sinnvoller als Textfeld mit der Beschränkung auf 5 Zeichen, wobei bei der Eingabe die Überprüfung auf eine Zahl erfolgen muß.

Dann dürfte sich auch dein Problem erledigen.

Geschrieben

Servus,

ich bin der Meinung, Dein Datenmodell ist nicht ganz sauber.

Die Postleitzahl sollte vom Typ char oder varchar sein, aber nicht integer.

Dann kannst Du auch mit den Stringfunktionen suchen.

Kannst Du das Datenmodell nicht anpassen?

Peter

Geschrieben

Ja, ich könnte das anpassen, aber was bringt mir das? Wie wäre denn die Abfrage, wenn der Datentyp Varchar2 wäre?

Hab nix gegen Sachsen :)

Geschrieben
Original geschrieben von dorti

Ja, ich könnte das anpassen, aber was bringt mir das?

Du umgehst einfach das Problem mit der führenden Null vorne.

Es ist einfach üblich.

Integer würde dir Vorteile bringen, wenn du mit Zahlen agierst, also Addierst, subtrahierst, ...

Und das brauchst du bei PLZ nicht

(Was ist das Maximum von [PLZ von München - PLZ von Berlin] :D :D :D ) - Oder?

Geschrieben

Ja, ist schon klar. Aber ich glaub, Ihr habt mein eigentliches Problem nicht verstanden, oder? Ich möchte einen Parameter an eine SQL-Abfrage übergeben, der so 555**,66*** oder ähnlich aussieht. Ich glaube nicht, dass sowas geht, aber vielleicht wisst Ihr noch eine Möglichkeit? In dem Fall ist doch Integer und Char egal.

Gruß dorti

Geschrieben

Kannst Du die Variabel nicht ergänzen und eine Abfrage bauen, die dann einen ganzen Bereich absucht?

Bsp:

Jemand gibt 5**** ein, dann baust du eine Abfrage die alle von 50000 bis 59999 als Ergebnis liefert

Geschrieben

Das ist ja kein Problem, so klappt das schon, aber schwierig wird es dann, wenn jemand zwei oder mehr Bereiche haben will. Das krieg ich dann nicht mit dem Parameter hin, dafür muss ich den Parameter auseinanderbauen, glaube ich.

Vielen Dank für alle Antworten.

Gruß dorti

Geschrieben

Also ich würde die PLZ erstmal in Char(10) umnwandeln und auf 5 Stellen erweitern (wegen der Nullen vorne). Dann würde ich alle Bereiche, nach denen gesucht werden soll anpassen, daß statt 55*** da ein 55% steht (alle Sterne entfernen und ein % dahinterhängen.

Zu guter letzt würde ich dann die einzelnen Suchstrings jeweils mit AND LIKE 'Suchstring' an die Where-Klausel hängen und das ganze ausführen...

Das ist so die Möglichkeit, die mir einfällt.

Alternativ könntest du ja auch eine benutzerdefinierte Funktion (wenn deine Datenbank sowas unterstützt) entwickeln, die kommagetrennt deine Suchstrings entgegennimmt, selbst diese ganzen Formatierungen und Suchen vornimmt und entsprechend True oder False zurückgibt...

Geschrieben

Weiß nicht wie das bei Oracle ist, ich benutze MSSQL-Server.

Ich würde eine Abfrage bauen die mir 66*** liefert und eine die mir 555** liefert. Dann würde ich bei per UNION verknüpfen und schon hast das was du möchtest.

Geschrieben
Original geschrieben von dBaj

Weiß nicht wie das bei Oracle ist, ich benutze MSSQL-Server.

Ich würde eine Abfrage bauen die mir 66*** liefert und eine die mir 555** liefert. Dann würde ich bei per UNION verknüpfen und schon hast das was du möchtest.

Das ist aber eine sehr schlechte Lösung - weil du so für jedes Suchkriterium eine eigene Abfrage machen müsstest - das lässt sich doch ganz einfach optimieren, indem du die beiden Suchkriterien einfach mit dem OR-Operator verknüpfst und nur eine Abfrage ohne UNION verwendest...

In meinem Post oben meinte ich übrigens auch OR LIKE... - mit AND kommt man nicht weit... - ist mir nur nicht so schnell aufgefallen...

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...