Ankündigung

Einklappen
Keine Ankündigung bisher.

[gelöst] Zahlen sortieren mit Varchar

Einklappen

Neue Werbung 2019

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

  • [gelöst] Zahlen sortieren mit Varchar

    Hi,

    ich habe ein Feld vom Varchar-Typ und muss die Datensätze sortieren. Jedoch bestehen einige Datensätze nur als zahlen und wenn ich einfach mit "ORDER BY cat" die Datensätze sortiere bekomme ich z.B. folgende Reihenfolge:

    1
    12
    13
    14
    15
    2
    20
    21

    ich weis dass das am Varchar-Typ liegt, aber natürlich will ich die wie int sortieren:

    1
    2
    12
    13
    14
    15
    20
    21

    Kann mir jemand falls es nicht mit SQL geht eine Methode für PHP sagen?
    Mit PHP müsste man via Regex die Zahlen vom Text trennen, die größe der zahlen vergleichen und dann eben ordnen.
    http://www.martin-thoma.de

  • #2
    Mit MySQL ist es mir insofern nicht bekannt da es ja extra den Datentyp int gibt der dann richtig sortiert wird.

    In PHP kannst du die Methode sort Anwenden und im 2ten Parameter einstellen wie sortiert werden soll. Wenn du allerdings nicht nur int-Werte sondern auch Buchstaben dabei hast dann wird das wohl nicht direkt was. Dann solltest du eher die Zahlen und die Buchstaben einzeln sortieren und aneinander hängen.

    Kommentar


    • #3
      also ich hab gerade folgendes gefunden:
      ORDER BY SUBSTR(col, 1, 1), TO_NUMBER(SUBSTR(col, 2, LENGTH(col)));
      wobei das ja nicht klappt da die buchstabenlänge variiert. das was ich will scheint sich alphanummerische sortierung zu nennen.

      Mit MySQL ist es mir insofern nicht bekannt da es ja extra den Datentyp int gibt der dann richtig sortiert wird.
      Ja, jedoch geht das nicht da ich ja auch text brauche. Die einzige Möglichkeit, die mir gerade einfällt ist das hinzufügen einer neuen Spalte in der nur Zahlen rein kommen. In die Erste würde dann Text + Zahlen hinein kommen. Ein PHP-Script würde den reinen Zahlenteil am Ende isolieren und in der zweiten Spalte speichern.
      http://www.martin-thoma.de

      Kommentar


      • #4
        Wofür hast du überhaupt in einer Spalte Zahlen und Text und dies musst du dann auch noch sortieren.

        Kommentar


        • #5
          ORDER BY LPAD(inhalt,8,'0')

          wobei du die 8 hier gegen die länge deines Feldes tauschen solltest

          Kommentar


          • #6
            vielen dank cycap, folgende lösung funktioniert wunderbar:

            ORDER BY LPAD(spaltenname,8,'0')
            http://www.martin-thoma.de

            Kommentar


            • #7
              Man lernt ja nie aus ... aber geht das nicht auch?

              Code:
              ORDER BY LPAD(inhalt, LENGTH(inhalt), '0')
              Manche Menschen sind wie Schnitzel - nicht zäh, aber beidseitig bekloppt!

              Kommentar


              • #8
                LENGTH liefert die länge des Strings in inhalt und nicht die länge der Spalte

                Kommentar


                • #9
                  Jupp, hatte ich mir fast gedacht ... ok ... merci!
                  Manche Menschen sind wie Schnitzel - nicht zäh, aber beidseitig bekloppt!

                  Kommentar

                  Lädt...
                  X