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
Ankündigung
Einklappen
Keine Ankündigung bisher.
MySQL Abfrage nach Datum sortieren
Einklappen
Neue Werbung 2019
Einklappen
X
-
MySQL Abfrage nach Datum sortieren
Stichworte: -
-
Zitat von akretschmer Beitrag anzeigenOder 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.
-
Zitat von milan Beitrag anzeigenJa 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,
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:
-
Zitat von milan Beitrag anzeigenDanke 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.
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)
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:
-
03.05.1996 - 08.05.1996 ===> 6991.50.80 - 6991.05.03... und jetzt?
Einen Kommentar schreiben:
-
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:
-
MySQL kann auch Substring, Date und sortieren nach Funktionswerten.
Und ich kann normalisieren ^^.
Einen Kommentar schreiben:
-
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:
-
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:
-
Zitat von milan Beitrag anzeigenHallo 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
Einen Kommentar schreiben:
Einen Kommentar schreiben: