Sophie: Nach Datum sortieren

Hallo,

ich weiß es ist scheiße dass in meiner Datenbank das Datum als deutsches Datum und im Feld varchar gespeichert wird. Ist es dennoch irgendwie möglich das Datum zu sortieren?

Mein Versuch war

$stmt = $mysqli->prepare($select . "WHERE status=? ORDER by sortierung ASC AND von ASC" );

Wird leider nicht beachtet. Ich weiß auch, dass ich das irgendwann umstellen muss, aber auf die schnelle habe ich dazu leider keine Zeit und ich weiß nicht was eine Änderungen an weiteren Änderungen mit sich zieht.

Danke für eure Hilfe.

  1. Tach!

    ich weiß es ist scheiße dass in meiner Datenbank das Datum als deutsches Datum und im Feld varchar gespeichert wird. Ist es dennoch irgendwie möglich das Datum zu sortieren?

    Dazu musst du es in eine sortierfähige Form wie J-M-T bringen. Oder Jahr, Monat und Tag extrahieren und dann diese drei Werte einzeln als Sortierkriterium angeben. Läuft auf Stringbearbeitung hinaus.

    dedlfix.

  2. Hello,

    die Sortierbarkeit von Daten ist einer der Gründe für Datentypen.
    Die beiden anderen Hauptgründe sind Rechnen/Operieren und Speicherplatzsparen.

    Lege also in der Tabelle eine weitere Spalte vom Typ Date oder Datetime an und übertrage das Datum in diese Spalte. Anschließend kannst Du einen Index auf die neue Spalte legen und dann in Zukunft ganz bequem darber sortieren und rechnen.

    Für die Anzeigeformatierung des Datums gibt es fertige Funktionen und wenn die Dir nicht gefallen, hast Du in Nullkommanix eine dafür geschrieben.

    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.
    1. Hallo,

      ich habe jetzt eine weitere Spalte sort_datum vom Typ DATE hinzugefügt und das Datum umwandeln lassen. Jetzt steht in der Spalte z.B. 2017-06-2017

      Die Sortierung klappt nun so halb

      Ergebnis

      15.07.2017 01.07.2017 11.07.2017

      Die 11.07.2017 müsste doch nach dem 15.07.2017 erscheinen? Warum steht sie ganz unten?

      Meine sortierung

      $stmt = $mysqli->prepare($select . "ORDER by status ASC, sort_datum DESC" );
      
      1. Tach!

        Die Sortierung klappt nun so halb

        Ergebnis

        15.07.2017 01.07.2017 11.07.2017

        Die 11.07.2017 müsste doch nach dem 15.07.2017 erscheinen? Warum steht sie ganz unten?

        Meine sortierung

        $stmt = $mysqli->prepare($select . "ORDER by status ASC, sort_datum DESC" );
        

        Das wird wohl am Wert in status liegen.

        dedlfix.

        1. Entschuldige bitte, es war mein Fehler. Ein Datum war nicht richtig gesetzt.

          Wenn ich es richtig verstehe ist es immer besser ein Datum im englischen Format und unter dem Typ DATE zu speicher?

          1. @@Sophie

            Wenn ich es richtig verstehe ist es immer besser ein Datum im englischen Format und unter dem Typ DATE zu speicher?

            Nein, gar nicht „im Format“, sondern als Typ DATE. Formatierung geschieht bei der Ausgabe.

            BTW, 2017-06-14 ist nicht „englisches Format“, sondern ein internationaler Standard. [ISO 8601]

            LLAP 🖖

            --
            “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
          2. Tach!

            Wenn ich es richtig verstehe ist es immer besser ein Datum im englischen Format und unter dem Typ DATE zu speicher?

            Es ist immer besser, Daten in dem für den jeweiligen Typ vorgesehenen Format zu speichern. Soweit die allgmeine Aussage. Für Datümer und Zeiten ist das nicht englisch, sondern der Feldtyp Date. Wie das da konkret im Inneren gespeichert wird, ist nicht zu sehen und auch nicht beeinflussbar, quasi eine Blackbox.

            Es ist aber so, dass du, um bestimmte Daten an einer bestimmten Stelle zu übergeben, diese Daten in einem maschinenlesbaren genau definierten Format übergeben musst. Das kann je nach Kontext auch was binäres sein. In deinem Fall muss es über ein SQL-Statement transportiert werden, und das ist ein Textformat. Alle Werte müssen dazu als Literal notiert werden. Für die Zahl 42 wären das die beiden Zeichen für die Ziffern 4 und 2. Auch für Datümer ist eine bestimmte Schreibweise festgelgt. Und das ist nicht unbedingt die im Englischen gebräuchlichste Form. (USA: MDY, GB: DMY, SQL: YMD) Siehe MySQL-Handbuch, Kapitel: Language Structure, Unterkapitel: Literal Values.

            dedlfix.

      2. Hallo

        ich habe jetzt eine weitere Spalte … vom Typ DATE hinzugefügt und das Datum umwandeln lassen. Jetzt steht in der Spalte z.B. 2017-06-2017

        Steth da wirklich „2017-06-2017“ oder ist dir hier deine Eingabe durch gegangen?

        Die Sortierung klappt nun so halb

        $stmt = $mysqli->prepare($select . "ORDER by status ASC, sort_datum DESC" );
        

        Sortiere mal nur nach sort_datum, wie es dedlfix schon angedeutet hat. Wenn die Sortierung nach Datum dann nicht stimmt, ist tatsächlich irgendwas im Argen.

        Tschö, Auge

        --
        Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
        Toller Dampf voraus von Terry Pratchett