Check ob zwischen 2 Spaltenwerten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Check ob zwischen 2 Spaltenwerten

    Hallo,

    wie frage ich ab, ob eine PLZ in einem bestimmten PLZ-Bereich vorkommt?

    Aufbau "liste":

    plz1 INT(5) | plz2 INT(5) | id INT(1)

    Inhalt z.B.:

    12345 | 13456 | 7473
    09847 | 34783 | 8378
    ...

    SELECT plz1,plz2 FROM liste WHERE plz1<=wert AND plz2>=wert

    Soweit kein Problem, aber was wenn "wert" eine PLZ ist die
    z.B. 01234 heißt? Dann arbeitet doch dieser Vergleich nicht
    mehr richtig oder?

  • #2
    Wieso nicht? Was passiert denn dann?

    Kommentar


    • #3
      Ja nichts passiert, weil die "0" vorn anscheinend nicht gewertet wird.

      Kommentar


      • #4
        Wenn du die Werte mit führenden Nullen abspeichern willst - dann ist INT sowieso der falsche Datentyp.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Re: Check ob zwischen 2 Spaltenwerten

          Original geschrieben von Truncate
          SELECT plz1,plz2 FROM liste WHERE plz1<=wert AND plz2>=wert
          dir ist schon klar, dass du einen wert suchst, der gleichzeitig kleiner oder gleich dem kleinsten wert UND grösser oder gleich dem grössten wert eines wertepaares ist
          Kissolino.com

          Kommentar


          • #6
            Und da bist Du sicher das Du das richtig verstanden hast?
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar


            • #7
              Original geschrieben von goth
              Und da bist Du sicher das Du das richtig verstanden hast?
              OffTopic:
              nö ... scheint mal wieder die nachmittägliche mattscheibe zu sein ... ich geh mich schämen.
              Kissolino.com

              Kommentar


              • #8
                Ich würde einfach BETWEEN verwenden ... im übrigen ist's der DB wurscht ob Du 'ne führende Null hast oder nicht ... das dürfte also kein Problem machen ... !
                carpe noctem

                [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                Kommentar


                • #9
                  Mit UNSIGNED ZEROFILL werden führende Nullen übrigens nicht abgeschnitten, fehlende sogar hinzugefügt und man spart sich das Gehampel in der Applikation ... nur so als Randnotiz.

                  Kommentar


                  • #10
                    Original geschrieben von onemorenerd
                    Mit UNSIGNED ZEROFILL werden führende Nullen übrigens nicht abgeschnitten, fehlende sogar hinzugefügt und man spart sich das Gehampel in der Applikation ... nur so als Randnotiz.
                    schön und gut, postleitzahlen kann man aber nicht wie integers behandeln, zerofill hin oder her. das führt sonst zu subtilen fehlern im verstehen der problemdomäne.
                    allein schon das problem der führenden null sollte aufhorchen lassen... das ganze mit zerofill zu patchen ist unfug.

                    postleitzahlen würde ich imho direkt als strings speichern und dann auch stringvergleiche nutzen, um die ergebnisse auszulesen.

                    meiner meinung nach will OP nicht wissen, ob ein ort zwischen zwei orten liegt, sondern eher z.b. alle orte finden, deren erste stellen in der postleitzahl mit irgendwas anfangen.
                    daher:


                    Code:
                    SELECT bla FROM blub WHERE plz LIKE '89%'.
                    Zuletzt geändert von axo; 14.03.2006, 20:57.

                    Kommentar


                    • #11
                      Nein es soll schon ein Vergleich erfolgen, ob z.B. "wert" zwischen 01234 und 34627 liegt.

                      Mit INT geht es wegen den führenden Nullen nicht und mit VARCHAR kann man ja nicht einfach .... AND bis>='wert' machen.

                      Kommentar


                      • #12
                        Original geschrieben von axo
                        schön und gut, postleitzahlen kann man aber nicht wie integers behandeln, zerofill hin oder her. das führt sonst zu subtilen fehlern im verstehen der problemdomäne.
                        Na wollen wir mal nicht päpstlicher sein als der Papst. Den Hinweis auf ZEROFILL gab ich, weil ich letzte Woche das Problem hatte, mehrere Datenstämme mit PLZ zu mergen, wobei einige die PLZs ohne führende Nullen enthielten. Da kam mir ZEROFILL sehr gelegen.
                        meiner meinung nach will OP nicht wissen, ob ein ort zwischen zwei orten liegt, sondern eher z.b. alle orte finden, deren erste stellen in der postleitzahl mit irgendwas anfangen.
                        Hat er ja inzwischen verneint, aber ich nahm schon an, er möchte wissen, ob eine PLZ in einer bestimmten Range liegt. Das passiert recht häufig, da große Städte eben solche PLZ-Ranges haben und man von der Post die Datensätze auch so bekommt (Berlin von 10abc bis 14xyz).

                        Jetzt komm ich langsam ins Labern, dabei wollte ich Truncate nur mal fragen, was er da für Daten hat. Meine von letzter Woche (ich sitze immernoch dran) sind von der Post und nachweislich nicht korrekt und/oder vollständig. Ich suche also einen möglichst aktuellen und präzisen Satz, hast du sowas?

                        Kommentar

                        Lädt...
                        X