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

  • 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

  • #2
    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.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      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?

      Kommentar


      • #4
        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.

        Kommentar


        • #5
          MySQL kann auch Substring, Date und sortieren nach Funktionswerten.

          Und ich kann normalisieren ^^.
          [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

          Kommentar


          • #6
            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?

            Kommentar


            • #7
              03.05.1996 - 08.05.1996 ===> 6991.50.80 - 6991.05.03... und jetzt?

              Kommentar


              • #8
                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)
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  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
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar


                  • #10
                    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.
                    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                    Kommentar

                    Lädt...
                    X