dorti Geschrieben 22. April 2004 Teilen Geschrieben 22. April 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 22. April 2004 Teilen Geschrieben 22. April 2004 Was machst Du denn mit der Postleitzahl 01234? Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dorti Geschrieben 22. April 2004 Autor Teilen Geschrieben 22. April 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 22. April 2004 Teilen Geschrieben 22. April 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 22. April 2004 Teilen Geschrieben 22. April 2004 Doppelt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 22. April 2004 Teilen Geschrieben 22. April 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dorti Geschrieben 22. April 2004 Autor Teilen Geschrieben 22. April 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 22. April 2004 Teilen Geschrieben 22. April 2004 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 ) - Oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dorti Geschrieben 22. April 2004 Autor Teilen Geschrieben 22. April 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zonkman8 Geschrieben 22. April 2004 Teilen Geschrieben 22. April 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dorti Geschrieben 22. April 2004 Autor Teilen Geschrieben 22. April 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
beetFreeQ Geschrieben 22. April 2004 Teilen Geschrieben 22. April 2004 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dorti Geschrieben 22. April 2004 Autor Teilen Geschrieben 22. April 2004 Ja, so irgendwas werde ich machen. Werd mal schauen, ob ich es hinkriege. Vielen Dank für Eure Hilfe! Gruß dorti Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dBaj Geschrieben 23. April 2004 Teilen Geschrieben 23. April 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 23. April 2004 Teilen Geschrieben 23. April 2004 Das geht auch mit Oracle. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
beetFreeQ Geschrieben 26. April 2004 Teilen Geschrieben 26. April 2004 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.