Juergen: zwei Wert vergleichen : SUBSTRING aber für Integer

Ich möchte in meiner SELECT anweisung zwei Zahken miteinander vergleichen. In der einen Tabelle steht ist

als 12345678

inder anderen

nur als

123456

Jetzt müsste beid er ersteren immer die letzen beiden Zahlen abgeschnitten werden umd sie korrekt zu vergleichen. Bei einem String würde ich es mit SUBSTRING(a.zahl,1,6)=b.zahl

machen. Aber bei einem Integer Wert funktioniert dies nicht. Ich habe auch nichts passenden gefunden.

Jürgen

  1. Tach!

    Ich möchte in meiner SELECT anweisung zwei Zahken miteinander vergleichen.

    Kann es sein, dass das gar keine Zahlen sind, sondern stattdessen Zeichenfolgen, bestehend aus nur Ziffern? So wie bei Postleitzahlen? Wenn ja, sollte das Feld kein Integer sein, sondern Varchar.

    Jetzt müsste beid er ersteren immer die letzen beiden Zahlen abgeschnitten werden umd sie korrekt zu vergleichen. Bei einem String würde ich es mit SUBSTRING(a.zahl,1,6)=b.zahl

    machen. Aber bei einem Integer Wert funktioniert dies nicht.

    Spricht was dagegen, String-Felder draus zu machen? Ansonsten muss man was mit Cast (Typumwandlung) machen oder Tricks wie Leerstring mit Zahlenwert kombinieren (CONCAT()).

    dedlfix.

    1. Ja das stimmt. Habe ich gemacht.

      dann gehts..... aber das Ergebniss ist grauenvoll 277543 Treffer, obwohl es nur ein einziger sein darf.

      SELECT a.name
      FROM tabelle1 a, tabelle2 b
      WHERE SUBSTRING(a.wert,1,5)=b.wert	
      
      1. Hello,

        beide Seiten müssen denselben Spaltentyp (Obertyp) haben, sonst kommt bei derartigen Vergleichen nur Müll raus. Die eine Seite könnte zu 0 konvertieren und die andere 0 enthalten, nur als Beispiel.

        Zeig doch mal deine Create-Statements.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es
        Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
      2. Tach!

        aber das Ergebniss ist grauenvoll 277543 Treffer, obwohl es nur ein einziger sein darf.

        SELECT a.name
        FROM tabelle1 a, tabelle2 b
        WHERE SUBSTRING(a.wert,1,5)=b.wert	
        

        Erweitere (zum Testen) die SELECT-Klausel um die Ausgabe von a.wert, SUBSTRING(a.wert,1,5) und b.wert, dann kannst du die Daten sehen und schauen, was die Funktion draus macht.

        dedlfix.

  2. Hallo,

    Ich möchte in meiner SELECT anweisung zwei Zahken miteinander vergleichen.

    Falls es wirklich Zahlen sind,...

    Jetzt müsste beid er ersteren immer die letzen beiden Zahlen abgeschnitten werden

    … könntest du auch durch 100 teilen und den Ganzzahl-Anteil zum Vergleich nehmen.

    Gruß
    Kalk

    1. Damit bist Du vermutlich zu speziell. Was ist mit 12345 und 123456789?

      Vermutlich kann man - wenn man Platz für schlauen Code hat - eine solche Abfrage basteln ohne in Strings zu konvertieren. So richtig Spaß machen tut das aber nicht, weil Computers Kleinhirn ja binär tickt und deshalb die Prüfung, ob man bei gleicher Stellenzahl angekommen ist, nicht ganz trivial ist. Da dividiert man fleißig durch 10 (oder multipliziert damit). Da man beim Konvertieren in Strings das gleiche tut, denke ich, dass es am Ende auf das Gleiche herauskommt. Und das Lesen der Daten aus der Table dauert eh um Größenordnungen länger...

      Wenn man die Zahlen nicht vorwiegend als Zahlen braucht, sollte man sie wohl besser als Strings ohne führende Nullen oder Spaces speichern.

      Rolf

      1. Hallo,

        vermutlich zu speziell. Was ist mit 12345 und 123456789?

        Dann habe ich eine andere Auffassung von dem, was „immer“ bedeutet.

        Wenn man die Zahlen nicht vorwiegend als Zahlen braucht, sollte man sie wohl besser als Strings ohne führende Nullen oder Spaces speichern.

        Da gebe ich dir recht.

        Gruß
        Kalk

        1. Wenn es immer zwei Extrastellen sind, dann hast Du latürnich recht und ich habe zu flüchtig gelesen.

          Vermutlich bin ich mit aber schon oft genug mit Fachbereichsvorgaben hereingefallen, um einem solchen Absolutheitsanspruch, wie ihn ein „immer“ mitbringt, vertrauen zu können. Und man müsste dann auch auf der Stelle das Datenmodell hinterfragen, weil das nach "sprechenden" Schlüsseln bzw. nach einer Kombination von zwei Schlüsseln in einem Wert müffelt.

          Rolf