2017-10-10 9 views
0

mysqlが私のdatetime値を好きではないのはなぜですか?mysql str_to_date datetime値が正しくない問題

mysql> select STR_TO_DATE('2017-10-06T00:00:00', '%%Y-%%m-%%dT%%H:%%i:%%s'); 
+---------------------------------------------------------------+ 
| STR_TO_DATE('2017-10-06T00:00:00', '%%Y-%%m-%%dT%%H:%%i:%%s') | 
+---------------------------------------------------------------+ 
| NULL               | 
+---------------------------------------------------------------+ 
1 row in set, 2 warnings (0.00 sec) 

mysql> show warnings 
    -> ; 
+---------+------+--------------------------------------------------------------------------+ 
| Level | Code | Message                 | 
+---------+------+--------------------------------------------------------------------------+ 
| Warning | 1411 | Incorrect datetime value: '2017-10-06T00:00:00' for function str_to_date | 
| Warning | 1411 | Incorrect datetime value: '2017-10-06T00:00:00' for function str_to_date | 
+---------+------+--------------------------------------------------------------------------+ 
2 rows in set (0.01 sec) 

任意のアイデア??

+0

なぜダブル '%'ですか?あなたは1つのパラメータにつき1つしか必要ではないと思います(つまり、「%Y-%m-%dT ...など」)。 – War10ck

答えて

2

試してみてください。

SELECT STR_TO_DATE(
    '2017-10-06T00:00:00', 
    '%Y-%m-%dT%H:%i:%s' 
); 

db-fiddleを参照してください。

+0

あなたの答えには非常に感謝しています。それは動作します。私が持っている問題は、他の人のコードと一緒に作業しているのですが、Heredoc構文でSQL文をラップしているので、sprintf()で特定の部分を置き換えているので、秒の書式(%s) 。私はこれがなぜ秒間に%% sを使用したのかと思います。二重パーセントがmysqlの特定のバージョンでのみ使用できるのかどうか知っていますか? – SamBremner

+0

@SamBremner:ドキュメントによると、 '%%' = 'A literal%character'は、[DATE_FORMAT()](https://dev.mysql.com/doc/refman/5.7/en/date-and- time-functions.html#function_date-format)。 – wchiquito

+0

さて、私は、バージョン4とその同じものに戻るmysqlマニュアルを見ていました。その場合、私はこのコードがどのように働いているのかわかりませんが、決して1%だけ使用するように変更します。 – SamBremner