Krull: Abfrage CONVERT(): Datum umwandeln...

Hallo zusammen, ich bins mal wieder mit meinem Problem.

Ich habe ja mitlerweile schonmal den Tip bekommen mir was zur Funktion:

CONVERT()

das innerhalb der Abfrage steht herauszusuchen.

Gefunden habe ich:

CONVERT(data_type[ (length)], expression [,style])

das muss ja nun mit in die Abfrage.

also

SELECT * FROM [wickel_db].[dbo].[data] CONVERT(data_type[ (length)], expression [,style]) ORDER BY [Datum]

Was muss ich jetzt aber als "data_type" , "length" , "expression" eintragen.

Ich habe schon so einiges ausprobiert aber nichts hat funktioniert.

Habe auch nichts weiter darüber gefunden.

Für "style" würde in meinem fall ja die "104" (dd.mm.YYYY) in Frage kommen.

Aber was ist nun mit den anderen Sachen?

MfG

Krull

  1. Hello,

    SELECT * FROM [wickel_db].[dbo].[data] CONVERT(data_type[ (length)], expression [,style]) ORDER BY [Datum]

    huch, was soll das denn sein?
    CONVERT ist eine ganz normale Spaltenfunktion, sie muss entsprechend in den ersten Abschnitt der SELECT-Klausel, in die WHERE-Klausel, oder in die ORDER BY-Klausel, aber nicht in die FROM-Klausel.
    Die genaue Syntax kannst dir da anschauen. Ich empfehle dort mal zu den Beispielen runterzuscrollen.

    Für "style" würde in meinem fall ja die "104" (dd.mm.YYYY) in Frage kommen.

    joa, wahrscheinlich ja.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Inter Arma Enim Silent Leges  --  Cicero
    1. »» SELECT * FROM [wickel_db].[dbo].[data] CONVERT(data_type[ (length)], expression [,style]) ORDER BY [Datum]
      huch, was soll das denn sein?

      dann ebend so:(oder was weiß ich)

      SELECT * FROM [wickel_db].[dbo].[data] ORDER BY [Datum] CONVERT(data_type[ (length)], expression [,104)

      Gut, gut.

      Und nu?

      Was kommt nun als: "data_type", "length" und "expression"?

      Also die Spalte um die es geht: [Datum] Typ: date

      Aktuelles Format: YYYY-mm-dd

      Gewünschtes Format in der Ausgabe: dd.mm.YYYY

      Sortierung in der Ausgabe nach: Jahr

      Datenbank: MSSQL 2008 Express witz Tools

      1. yo,

        dann ebend so:(oder was weiß ich)

        SELECT * FROM [wickel_db].[dbo].[data] ORDER BY [Datum] CONVERT(data_type[ (length)], expression [,104)

        CONVERT in aller regel zum anzeigen (projektion), also hinter dem SELECT zum beispiel. bei der sortierung hast du ja schon den hinweis bekommen, dass du keine konvertierung verwenden musst, wenn es sich um einen entsprechenden Datentyp von datetime handelt, da es ja eh richtig formatiert wird.

        SELECT CONVERT(DATETIME, datumsspalte, 104)
        FROM tabelle
        ORDER BY datumsspalte
        ;

        1. so,

          Das habe ich nun alles soweit eingebracht.

          Die Abfrage läuft auch und so weiter.

          Nur das ausgegebene Datumsformat ist immernoch das gleiche.

          Also: YYYY.mm.dd

          SELECT CONVERT(datetime, [Datum], 104) [Fabrikat], [Typ], [Motornummer], [Spannung], [Strom], [Leistung], [Drehzahl], [Frequenz], [Kaltleiter], [Thermofühler], [Nuten], [Blechpaketdurchmesser], [Blechpaketlänge], [Spulenmaß], [Windungen], [Drahtdurchmesser], [Wickelschritt], [Schaltung], [Wickelzeit], [Bemerkung], [Datum], [Auftragsnummer], [Kunde], [Ort], [Gegenstand], [Wickler] FROM [wickel_db].[dbo].[data] ORDER BY [Datum]";

          Also ums deutlich zu sagen:

          Es ist im Moment egal ob ich CONVERT() drin hab oder nicht.

          ARRG! Hilfe!

          1. Hello,

            SELECT CONVERT(datetime, [Datum], 104) [Fabrikat], [Typ]

            je mehr ich drüber nachdenke, umso mehr halte ich CONVERT(datetime,... für ein mögliches Problem. Das Ergebnis deiner Abfrage ist somit wiederum ein Datumstyp, vieleicht wird er entsprechend wieder in Ausgangslage formatiert. Versuch mal, daraus eine Zeichenfolge zu machen, also VARCHAR oder CHAR(10) oder sowas.

            MfG
            Rouven

            --
            -------------------
            sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
            Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)
            1. Hello,

              »» SELECT CONVERT(datetime, [Datum], 104) [Fabrikat], [Typ]
              Versuch mal, daraus eine Zeichenfolge zu machen, also VARCHAR oder CHAR(10) oder sowas.

              Das war ein Satz mit X ... Das war wohl nix.

              Wenn ich nun z.B. das hier draus mache:

              "SELECT [Fabrikat], [Typ], [Motornummer], [Spannung], [Strom], [Leistung], [Drehzahl], [Frequenz], [Kaltleiter], [Thermofühler], [Nuten], [Blechpaketdurchmesser], [Blechpaketlänge], [Spulenmaß], [Windungen], [Drahtdurchmesser], [Wickelschritt], [Schaltung], [Wickelzeit], [Bemerkung], CONVERT(varchar, Datum, 104) [Datum], [Auftragsnummer], [Kunde], [Ort], [Gegenstand], [Wickler] FROM [wickel_db].[dbo].[data] ORDER BY [Datum]";

              Dann macht er zwar das draus was ich haben will, aber er sortiert das dann wieder nach Tag und nicht nach Jahr.

              Nun gehen wir mal hiervon aus:

              "SELECT [Fabrikat], [Typ], [Motornummer], [Spannung], [Strom], [Leistung], [Drehzahl], [Frequenz], [Kaltleiter], [Thermofühler], [Nuten], [Blechpaketdurchmesser], [Blechpaketlänge], [Spulenmaß], [Windungen], [Drahtdurchmesser], [Wickelschritt], [Schaltung], [Wickelzeit], [Bemerkung], CONVERT(date, Datum, 104) [Datum], [Auftragsnummer], [Kunde], [Ort], [Gegenstand], [Wickler] FROM [wickel_db].[dbo].[data] ORDER BY [Datum]";

              Alles schön und gut, er übernimmt aber nicht das "style" Argument!!

              1. Hello,

                "SELECT [Fabrikat], [Typ], [Motornummer], [Spannung], [Strom], [Leistung], [Drehzahl], [Frequenz], [Kaltleiter], [Thermofühler], [Nuten], [Blechpaketdurchmesser], [Blechpaketlänge], [Spulenmaß], [Windungen], [Drahtdurchmesser], [Wickelschritt], [Schaltung], [Wickelzeit], [Bemerkung], CONVERT(varchar, Datum, 104) [Datum], [Auftragsnummer], [Kunde], [Ort], [Gegenstand], [Wickler] FROM [wickel_db].[dbo].[data] ORDER BY [Datum]";
                Dann macht er zwar das draus was ich haben will, aber er sortiert das dann wieder nach Tag und nicht nach Jahr.

                und das wundert dich? Du fomatierst das Datum um auf dd.mm.yyyy, benennst die Spalte "Datum" und sortierst danach.
                Das ist nicht das was du möchtest. Sortieren möchtest du entweder nach dem Originalwert (der dir hier derzeit nicht mehr zur Verfügung steht), oder eben nach YEAR(datum), sofern es die YEAR-Funktion in MS-SQL gibt.

                MfG
                Rouven

                --
                -------------------
                sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
                1. oder eben nach YEAR(datum), sofern es die YEAR-Funktion in MS-SQL gibt.

                  ...ORDER BY YEAR([Datum])

                  funzt wunderbar.

                  ab jetzt auch noch:

                  ...ORDER BY MONTH([Datum]) AND YEAR([Datum]

                  funzt? Mal probieren.

                  1. Hello,

                    ...ORDER BY MONTH([Datum]) AND YEAR([Datum]

                    ui, das würde mich syntaktisch wundern. Ich dachte gerade mal kurzfristig über eine Sortierung nach dem String bestehend aus beiden Feldern nach, die scheitert aber daran, dass die Sortierung dann 12009, 102009, 112009, 122009, 22009 lauten würde.
                    Ich gebe jedoch zu bedenken, dass es dein DBMS unter bestimmten Umständen angenehmer findet direkt nach dem Ausgangswert zu sortieren - du könntest also in deinem SELECT einfach das Originaldatum mit einem anderen Alias nochmal unterbringen und dann nach dieser Spalte sortieren.

                    MfG
                    Rouven

                    --
                    -------------------
                    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                    Death is nature's way of telling you to slow down.
              2. yo,

                Dann macht er zwar das draus was ich haben will, aber er sortiert das dann wieder nach Tag und nicht nach Jahr.

                das ist so nicht ganz richtig, sicherlich sortiert er "genauer" auch nach den tagen und monaten, aber er sortiert auch nach den jahren.

                Ilja

      2. Hello,

        ich schreibe mal ins Unreine, von wegen kein SQL_Server verfügbar.

        Also die Spalte um die es geht: [Datum] Typ: date

        hervorragend! damit kann man arbeiten!

        Aktuelles Format: YYYY-mm-dd

        okay

        Gewünschtes Format in der Ausgabe: dd.mm.YYYY

        gut, dann selektiere die Spalte entsprechend - du willst einen Text rausbekommen, oder ein Datum, wie auch immer
        CONVERT(date, datum, 104)
        CONVERT(varchar, datum, 104)
        sprich:
        ich hätte gerne "datum" als "date" oder "varchar" und als Format verwende 104.

        Sortierung in der Ausgabe nach: Jahr

        ah, na das ist ja was anderes. Da bist du doch mit der yyyy-mm-dd-Schreibweise schon gut bedient. Ganz explizit müsstest du auch eine Funktion wie YEAR auf deine Datumsspalte anwenden können...

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"