Parameter in DATE_FORMAT

dave_christopher

Aktiver Benutzer
Beiträge
31
Hallo zusammen,

ich habe ein Problem mit der Funktion "DATE_FORMAT", ich möchte dort ein in einem Parameter (p_date) übergebenes Datum (z.B."{d '2017-04-26'}") umformatieren (erster Tag des Jahres), damit ich diese in einem Statement weiterverwenden kann.

Leider scheint folgende Syntax nicht zu funktionieren:
DATE_FORMAT( @p_date,'%Y-01-01')

obwohl

DATE_FORMAT( {d '2017-04-26'},'%Y-01-01') das korrekte Ergebnis ausgibt

Habt ihr eine Idee woran das liegen kann bzw. was ich machen kann?

Vielen Dank für jede Hilfe.

Viele Grüße
Dave
 
Werbung:
Das funktioniert! Dann bekomme ich genau den Parameterwert "{d '2017-04-26'}" ausgegeben.
Aber sobald ich diesen in DATE_ADD oder DATE_FORMAT verwende, funktioniert es nicht mehr.
Einen Syntax oder Ausgabefehler erhalte ich aber auch nicht.
 
Was hat denn @p_date für ein Format? Wenn es kein String ist wäre das Verhalten nachvollziehbar. Bei einem String sollte man meinen das auch MySQL es verarbeitet :)
 
Das ist das was du suchst :).

Zuerst wandelst du deinen String in ein gültiges Datum und danach formatierst du ihn auch dem 1.1 des Jahres

Code:
SELECT
    DATE_FORMAT(
        STR_TO_DATE('{d 2017-04-26}', '{d %Y-%m-%d}')
    ,'%Y-01-01');

Beispiel

  • Code:
    mysql> SELECT
        ->     DATE_FORMAT(
        ->         STR_TO_DATE('{d 2017-04-26}', '{d %Y-%m-%d}')
        ->     ,'%Y-01-01');
    +---------------------------------------------------------------------------------------+
    | DATE_FORMAT(
            STR_TO_DATE('{d 2017-04-26}', '{d %Y-%m-%d}')
        ,'%Y-01-01') |
    +---------------------------------------------------------------------------------------+
    | 2017-01-01                                                                            |
    +---------------------------------------------------------------------------------------+
    1 row in set (0,00 sec)
    
    mysql>
 
Vielen Dank für den Vorschlag.
Das funktionier zwar so:
Code:
DATE_FORMAT(
        STR_TO_DATE('{d 2017-04-26}', '{d %Y-%m-%d}')
    ,'%Y-01-01')

aber so leider nicht mehr:
Code:
DATE_FORMAT(
        STR_TO_DATE(@p_date, '{d %Y-%m-%d}')
    ,'%Y-01-01')
 
und warum nicht ??

Code:
mysql> set @p_date='{d 2017-04-26}';
Query OK, 0 rows affected (0,00 sec)

mysql> SELECT DATE_FORMAT( STR_TO_DATE( @p_date, '{d %Y-%m-%d}') ,'%Y-01-01');
+-----------------------------------------------------------------+
| DATE_FORMAT( STR_TO_DATE( @p_date, '{d %Y-%m-%d}') ,'%Y-01-01') |
+-----------------------------------------------------------------+
| 2017-01-01                                                      |
+-----------------------------------------------------------------+
1 row in set (0,00 sec)

mysql>

zeig mal bitte was SELECT @pdate; ergibt
 
Falls dein Datum String noch Hochkommas drin hat schau dir mal das an.

Code:
mysql> set @p_date="{d '2017-04-26'}";
Query OK, 0 rows affected (0,00 sec)

mysql> SELECT DATE_FORMAT( STR_TO_DATE( @p_date, "{d '%Y-%m-%d'}") ,'%Y-01-01');
+-------------------------------------------------------------------+
| DATE_FORMAT( STR_TO_DATE( @p_date, "{d '%Y-%m-%d'}") ,'%Y-01-01') |
+-------------------------------------------------------------------+
| 2017-01-01                                                        |
+-------------------------------------------------------------------+
1 row in set (0,00 sec)

mysql>
 
Werbung:
Zurück
Oben