Pit: mysql STR_TO_DATE

Hallo,

warum ergibt SELECT STR_TO_DATE('24.10.2017 13:50','%d.%M.%Y %h:%i');

NULL

und nicht ein gültiges mysql-datum?

Pit

  1. Tach!

    warum ergibt SELECT STR_TO_DATE('24.10.2017 13:50','%d.%M.%Y %h:%i');

    NULL

    und nicht ein gültiges mysql-datum?

    Weil es bezogen auf das Muster kein gültiger Wert ist. Es wird auch eine Warnung erzeugt, die du gesondert abholen musst (kein Error, den man mit Funktionen wie mysql_error() holen könnte).

    Ich weiß nicht, was die Warnung sagt, aber 13 ist jedenfalls kein gültiger Wert für %h und 10 auch nicht für %M. Siehe DATE_FORMAT().

    dedlfix.

    1. Hi dedlfix,

      Ich weiß nicht, was die Warnung sagt, aber 13 ist jedenfalls kein gültiger Wert für %h und 10 auch nicht für %M. Siehe DATE_FORMAT().

      Vielen Dank, das wars. Jetzt fluppt das prima.

      Sag mal, bit es auch eine gegenteilige Funktion, die aus "2017-10-24 13:50:00" wieder "24.10.2017 13:50" macht? Oder muß ich da selber ran?

      Pit

      1. Tach!

        Sag mal, bit es auch eine gegenteilige Funktion, die aus "2017-10-24 13:50:00" wieder "24.10.2017 13:50" macht? Oder muß ich da selber ran?

        "2017-10-24 13:50:00" ist ein Literal, um ein Datum angeben zu können. Die interne Darstellung ist eine andere. Was du vermutlich möchtest, ist einen DateTime-Wert in eine beliebige String-Form zu bringen. Die Funktion DATE_FORMAT() dazu hatte ich bereits verlinkt, weil dort die Formatierzeichen beschrieben sind, die STR_TO_DATE() benötigt.

        dedlfix.

        1. Hi dedlfix,

          "2017-10-24 13:50:00" ist ein Literal, um ein Datum angeben zu können. Die interne Darstellung ist eine andere. Was du vermutlich möchtest, ist einen DateTime-Wert in eine beliebige String-Form zu bringen. Die Funktion DATE_FORMAT() dazu hatte ich bereits verlinkt, weil dort die Formatierzeichen beschrieben sind, die STR_TO_DATE() benötigt.

          Na dann nochmal danke. Ich hatte nur auf die Formatierungszeichen, nicht aber auf die Funktion geachtet.

          Pit

  2. Hello,

    warum ergibt SELECT STR_TO_DATE('24.10.2017 13:50','%d.%M.%Y %h:%i');

    NULL

    und nicht ein gültiges mysql-datum?

    Gute Frage. Auch mit dem erforderlichen kleinen '%m' für die Monatszahl geht es aber trotzdem nicht.

    So herum geht es:

    SELECT STR_TO_DATE('20171024 12:22','%Y%m%d %H:%i');  
    
    -> 2017-10-24 12:22:00
    

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Hallo Tom,

      So herum geht es:

      SELECT STR_TO_DATE('20171024 12:22','%Y%m%d %H:%i');  
      
      -> 2017-10-24 12:22:00
      

      Genau, nach dedlfix Hinweis bin ich auch auf die beiden verdrehten Buchstaben gekommen, drum danke auch an Dich.

      Pit

      1. Hello,

        so auch:

        SELECT STR_TO_DATE('24102017 12:22','%d%m%Y %H:%i');
        
        -> 2017-10-24 12:22:00
        

        und

        select STR_TO_DATE('24.10.2017 13:22','%d.%m.%Y %H:%i');
        
        -> 2017-10-24 13:22:00
        

        geht auch.

        Allerdings ging dein erster String (C&P), trotz Korrektur des %M in %m bei mir auch nicht. Das muss an den Punkten oder den % gelegen haben. Welche hattest Du denn benutzt? Bei utf8 sehen die einen Punkte und % auf dem Screen ja so aus, wie die anderen. ;-(

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Allerdings ging dein erster String (C&P), trotz Korrektur des %M in %m bei mir auch nicht. Das muss an den Punkten oder den % gelegen haben. Welche hattest Du denn benutzt? Bei utf8 sehen die einen Punkte und % auf dem Screen ja so aus, wie die anderen. ;-(

          Ich dachte, es hätte an dem %h anstelle %H gelegen, denn per C+P und Änderung in %H ging es bei mir.

          Pit

          1. Hello,

            Ich dachte, es hätte an dem %h anstelle %H gelegen, denn per C+P und Änderung in %H ging es bei mir.

            Darum habe ich ja extra noch "13:22" ausprobiert. Daran lag es bei mir also nicht.

            Woher kam denn der Datumsstring?

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es!
            Das Leben selbst ist der Sinn.
        2. Hallo

          so auch:

          SELECT STR_TO_DATE('24102017 12:22','%d%m%Y %H:%i');
          
          -> 2017-10-24 12:22:00
          

          und

          select STR_TO_DATE('24.10.2017 13:22','%d.%m.%Y %H:%i');
          
          -> 2017-10-24 13:22:00
          

          geht auch.

          Allerdings ging dein erster String (C&P), trotz Korrektur des %M in %m bei mir auch nicht. Das muss an den Punkten oder den % gelegen haben.

          Nein, das lag, neben %M statt %m, zusätzlich an dem ursprünglich verwendeten %h statt %H (%h = Stunden im 12-Stunden-Format). Werte über 12, wie die 13 im ursprünglichen Code, platzen mit %h. Deine Beispiele funktionieren, da du %H benutzt.

          Tschö, Auge

          --
          Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
          Toller Dampf voraus von Terry Pratchett