Zum Inhalt springen

Nach Postleitzahlbereichen suchen?


dorti

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...