Krull: Abfrage mit php; Ausgabe sortieren nach Jahr aus Spalte [Datum]

Hallo zusammen.

Habe folgendes Problem in der Sortierung einer Datenbank abfrage.

Ich möchte den kompletten Inhalt einer Tabelle anzeigen lassen und das ganze soll nach dem im Datum angegebenen Jahr sortiert werden.

Bisher:  "SELECT * FROM //tabelle// ORDER BY [Datum]";

Die gesamte Ausgabe der Tabelle funktionier einwandfrei, nur das alles nach dem Tag sortiert wird.

Datumsformat in Tabelle:  dd.mm.YYYY

Die gesamte Ausgabe soll nun nach Jahr (YYYY) sortiert werden.

Kann mir bitte jemand einen Tip geben???

Verwendete Datenbank:

MSSQL 2008 Express with Tools

  1. hi,

    Die gesamte Ausgabe soll nun nach Jahr (YYYY) sortiert werden.

    Kann mir bitte jemand einen Tip geben???

    Stringfunktionen und GROUP BY...

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Stringfunktionen und GROUP BY...

      -.-

      Einen etwas größeren Tip bitte?

      Hab da nicht so die mörder mäßige Ahnung von.

    2. Moin!

      »» Die gesamte Ausgabe soll nun nach Jahr (YYYY) sortiert werden.
      »»
      »» Kann mir bitte jemand einen Tip geben???

      Stringfunktionen und GROUP BY...

      Stringfunktionen sind für Datumsoperationen falsch, und GROUP BY für Sortieroperationen.

      - Sven Rautenberg

      1. Moin;

        Stringfunktionen sind für Datumsoperationen falsch,

        Datumsoperationen funktionieren nur mit dem richtigen Feldtyp der einer Datumsangabe lt. DBMS entspricht.

        Liegt das Datum jedoch als String vor (wie in der Aufgabenstellung, s.o.: varchar...), nimm eine Stringfunktion.

        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. yo,

          Liegt das Datum jedoch als String vor (wie in der Aufgabenstellung, s.o.: varchar...), nimm eine Stringfunktion.

          mal davon abgesehen, das es wohl beser ist, den string in einen datumstyp zu wandeln, was hat das ganze mit GROUP BY zu tun, wenn man nur sortieren will ?

          Ilja

  2. yo,

    Ich möchte den kompletten Inhalt einer Tabelle anzeigen lassen und das ganze soll nach dem im Datum angegebenen Jahr sortiert werden.

    ich hoffe, der typ die spalte liegt auch als datumstyp vor. dann bietet dir jedes dbms geeignete datumsfunktionen, um das jahr zu extrahieren und danach zu sortieren. in deinem falle ist es meiner achtes nach CONVERT aber schau dir das noch mal in der doku an.

    Ilja

    1. wobei ich mich erinere, mssql sollte die funktion YEAR() auch kennen....

      1. wobei ich mich erinere, mssql sollte die funktion YEAR() auch kennen....

        emm ja.

        Ich seh gerade nur gaaanz viele Fragezeichen vor meinen Augen :-)

  3. Hi Krull,

    Bisher:  "SELECT * FROM //tabelle// ORDER BY [Datum]";

    Wenn Du nach dem Datum sortierst, sind die Eintraege dann nicht insbesondere nach dem Jahr sortiert?

    viele Gruesse
    der Bademeister

    1. »» Bisher:  "SELECT * FROM //tabelle// ORDER BY [Datum]";

      Wenn Du nach dem Datum sortierst, sind die Eintraege dann nicht insbesondere nach dem Jahr sortiert?

      Nee der sortiert nach Tag nichr nach Jahr ...

      Ich muss allerdings dazu sagen, dass die Spalte [Datum] als varchar(MAX) konfiguriert ist.

      1. yo,

        Ich muss allerdings dazu sagen, dass die Spalte [Datum] als varchar(MAX) konfiguriert ist.

        und das dann ganz schnell wieder ändern und einen datumstyp nehmen !

        Ilja

        1. und das dann ganz schnell wieder ändern und einen datumstyp nehmen !

          'data'-Tabelle

          • Die Tabelle kann nicht geändert werden.
            Fehler beim Konvertieren einer Zeichenfolge in ein Datum und/oder eine Uhrzeit.

          Geht nicht. Warum auch immer.

          Datumsformat soll aber !dd.mm.yyyy! bleiben!

          1. Moin

            Datumsformat soll aber !dd.mm.yyyy! bleiben!

            Warum? Warum verwendest du nicht das internationale Datumsformat YYYY-MM-DD und wandelst es bei der Ausgabe in dein gewünschtes Format um?

            Dir entstehen nur NAchteile wenn du ein Datum NICHT als Datum behandelst. Das würde ich mir an deiner Stelle genau überlegen!

            Gruß Bobby

            --
            -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
            -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
            ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
            1. Warum? Warum verwendest du nicht das internationale Datumsformat YYYY-MM-DD und wandelst es bei der Ausgabe in dein gewünschtes Format um?

              Gut. Hab ich.

              Aber wie wandele ich es jetzt in der Ausgabe wieder in dd.mm.yyy?

              1. Moin

                mit den PHP-Funktionen date() und strtotime()

                strtime() macht einen Unix timestamp und date() wandelt diesen timestring in dein gewünschtes Format um.

                Gruß Bobby

                --
                -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
                -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
                ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
                1. dankeschön.

                2. Moin

                  Ergänzung:

                  das geht auch sicher einfacher direkt bei der SQL-Abfrage. Das weiß aber nicht genau.

                  Ich glaube: SELECT DATE_FORMAT(Datumsspalte),GET_FORMAT(DATE,'EUR')) odre sowas

                  Genau weiß ichs nicht. Hat da jemand einen Tipp?

                  Gruß Bobby

                  --
                  -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
                  -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
                  ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
                  1. Moin

                    Ich glaube: SELECT DATE_FORMAT(Datumsspalte),GET_FORMAT(DATE,'EUR'))

                    sorry, das muss natürlich heißen:
                    SELECT DATE_FORMAT(Datumsspalte,GET_FORMAT(DATE,'EUR'))

                    Gruß Bobby

                    --
                    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
                    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
                    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
                  2. Genau weiß ichs nicht. Hat da jemand einen Tipp?

                    Ja: Einfach kurz nachlesen.

                    viele Gruesse
                    der Bademeister

                    1. Moin!

                      »» Genau weiß ichs nicht. Hat da jemand einen Tipp?

                      Ja: Einfach kurz nachlesen.

                      Genauer hingucken ins Ausgangsposting:

                      "Verwendete Datenbank:

                      MSSQL 2008 Express with Tools"

                      Nix MySQL!

                      - Sven Rautenberg

                      1. Hi Sven,

                        Genauer hingucken ins Ausgangsposting:

                        Auch ein guter Tipp, danke ;-)

                        date_format gibts gar nicht im MSSQL, oder? Damit war hier so einiges in diesem Thread etwas off topic.

                        Danke für den Hinweis.

                        viele Grüße
                        der Bademeister

              2. yo,

                Aber wie wandele ich es jetzt in der Ausgabe wieder in dd.mm.yyy?

                hast du dir wie bereits erwähnt mal die Funktionen CONVERT() und diverse andere datumsfunktionen in deiner MSSQL hilfe angeschaut ?

                Ilja

      2. Nee der sortiert nach Tag nichr nach Jahr ...

        Ich muss allerdings dazu sagen, dass die Spalte [Datum] als varchar(MAX) konfiguriert ist.

        Dann empfehle ich Dir dringendst, das Design der Datenbank so zu aendern, dass ein Datum, das Du speicherst, auch weiss, dass es ein Datum ist (bevor Du auf die Idee kommst, am Ende die Sortierung mit String-Funktionen zu realisieren).

        viele Gruesse
        der Bademeister

  4. Moin

    Bisher:  "SELECT * FROM //tabelle// ORDER BY [Datum]";

    Spalte Datum als Datumsformat konfigurieren, und dann funktioniert das auch mit dem Sort wie du es beschrieben hast! Verwende immer den vorgesehenen Datentyp in der Datenbank. So kannst du z.B. direkt in der DB mit Datum rechnen.

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  5. nochmal mehr Info´s:

    Spalte [Datum]: varchar(MAX) und lässt sich nicht (warum auch immer) in (date) oder ähnliches ändern!

    Datumsformat: dd.mm.yyyy

    Sortierung nach: Jahr (yyyy)

    1. Moin

      Datenformat Date in MySQL sieht folgendermaßen aus: YYYY-MM-DD

      wandel deine Datumsangaben bitte in dieses gültige Format um. Dann funktioniert das auch mit der Typänderung.

      Gruß Bobby

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
      -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
      ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)