Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Abfrage nach Datum sortieren

Einklappen

Neue Werbung 2019

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

  • milan
    hat ein Thema erstellt MySQL Abfrage nach Datum sortieren.

    MySQL Abfrage nach Datum sortieren

    Hallo Zusammen,

    ich habe ein kleines Problem bei einer MySQL Abfrage:
    Ganz schickte einfach Abfrage, funktioniert soweit alles gut. Nur möchte ich nach einem Datum sortieren. Dieses Datum ist aber jedoch in folgendem Format angegeben:
    dd.mm.yyyy - dd.mm.yyyy (Beispiel 22.01.2015 - 23.01.2015)

    Wie kann ich danach sortieren lassen?
    Kann mir da jemand helfen?

    Viele Grüße
    Milan

  • akretschmer
    antwortet
    Zitat von akretschmer Beitrag anzeigen
    Oder darf es nach der Mitte der 2 Datumsangaben sein?

    Code:
    test=*# select * from milan order by lower(dr) + (upper(dr)-lower(dr));

    wer meinen Fehler findet darf ihn behalten.

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Zitat von milan Beitrag anzeigen
    Ja das ist mir schon klar, wie Strings sortiert werden. Mir ist auch klar, dass die Felder besser als date gespeichert werden sollten.
    Jedoch überschneiden sich die einzelnen DATERANGES nicht,
    Das hoffst Du, aber wie stellst Du das sicher?

    Code:
    test=*# create table milan (dr daterange, exclude using gist(dr with &&));
    CREATE TABLE
    Time: 86,945 ms
    test=*# insert into milan values ('[2015-01-22,2015-01-23)');
    INSERT 0 1
    Time: 0,443 ms
    test=*# insert into milan values ('[2015-01-12,2015-01-28)');
    ERROR:  conflicting key value violates exclusion constraint "milan_dr_excl"
    DETAIL:  Key (dr)=([2015-01-12,2015-01-28)) conflicts with existing key (dr)=([2015-01-22,2015-01-23)).
    Time: 0,370 ms

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Zitat von milan Beitrag anzeigen
    Danke für Deine Antwort.

    Das ist mir klar, dass ein solcher String schlecht zu sortieren ist.
    Ich müsste lediglich hinbekommen, dass das quasi die einzelnen Zellen reversed werden vor dem Sortieren.
    Bitte was?

    Code:
    test=*# select * from milan;
               dr
    -------------------------
     [2015-01-22,2015-01-23)
     [2015-01-12,2015-01-28)
     [2015-02-12,2015-03-28)
     [2014-12-12,2015-01-01)
    (4 rows)

    Nach welchem der 2 Datumsangaben willst überhaupt sortieren:


    Code:
    test=*# select * from milan order by lower(dr);
               dr
    -------------------------
     [2014-12-12,2015-01-01)
     [2015-01-12,2015-01-28)
     [2015-01-22,2015-01-23)
     [2015-02-12,2015-03-28)
    (4 rows)
    
    Time: 0,316 ms
    test=*# select * from milan order by upper(dr);
               dr
    -------------------------
     [2014-12-12,2015-01-01)
     [2015-01-22,2015-01-23)
     [2015-01-12,2015-01-28)
     [2015-02-12,2015-03-28)
    (4 rows)
    Oder darf es nach der Mitte der 2 Datumsangaben sein?

    Code:
    test=*# select * from milan order by lower(dr) + (upper(dr)-lower(dr));
               dr
    -------------------------
     [2014-12-12,2015-01-01)
     [2015-01-22,2015-01-23)
     [2015-01-12,2015-01-28)
     [2015-02-12,2015-03-28)
    (4 rows)

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    03.05.1996 - 08.05.1996 ===> 6991.50.80 - 6991.05.03... und jetzt?

    Einen Kommentar schreiben:


  • milan
    antwortet
    Ja das ist mir schon klar, wie Strings sortiert werden. Mir ist auch klar, dass die Felder besser als date gespeichert werden sollten.
    Jedoch überschneiden sich die einzelnen DATERANGES nicht, sodass es mir in diesem Fall reichen würde, wenn man die Strings invertieren könnte und dann sortieren. Nur ich weiß leider nicht, ob dies möglich ist.
    Ich müsste die Felder quasi so umwandeln um sie zu sortieren:
    22.01.2015 - 23.01.2015 ===> 5102.10.32 - 5101.10.22

    Kann ich das irgendwie machen?

    Einen Kommentar schreiben:


  • ChristianK
    antwortet
    MySQL kann auch Substring, Date und sortieren nach Funktionswerten.

    Und ich kann normalisieren ^^.

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    Weißt du wie String-Sortierung funktioniert? Da ist der 30.1.2014 größer als der 20.12.2014...
    Du kannst der Datenbank vielleicht mit irgendwelchen CASTs und Tricks deinen String als Datum verkaufen, einfacher wäre es aber das einfach auch als (zwei) DATE zu speichern, oder eben noch besser als DATERANGE falls dein DBMS das unterstützt.

    Einen Kommentar schreiben:


  • milan
    antwortet
    Danke für Deine Antwort.

    Das ist mir klar, dass ein solcher String schlecht zu sortieren ist.
    Ich müsste lediglich hinbekommen, dass das quasi die einzelnen Zellen reversed werden vor dem Sortieren.

    Kann man das irgendwie machen?

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Zitat von milan Beitrag anzeigen
    Hallo Zusammen,

    ich habe ein kleines Problem bei einer MySQL Abfrage:
    Ganz schickte einfach Abfrage, funktioniert soweit alles gut. Nur möchte ich nach einem Datum sortieren. Dieses Datum ist aber jedoch in folgendem Format angegeben:
    dd.mm.yyyy - dd.mm.yyyy (Beispiel 22.01.2015 - 23.01.2015)

    Wie kann ich danach sortieren lassen?
    Kann mir da jemand helfen?

    Viele Grüße
    Milan
    Das ist kein Datum sondern ein DATERANGE, und dazu in falscher Syntax. Ist mir neu, daß MySQL das überhaupt kennt. Also, vermutlich ist es also nur ein String. FAIL. Geh nach Hause und bringe es in Ordnung.

    Einen Kommentar schreiben:

Lädt...
X