2016-10-28 4 views
0

を次のクエリは、は誤ったdatetime値にMySQLのテーブルを作成できません「...」機能str_to_dateため

select date(str_to_date("08-Nov-2005 22:07","%d-%M-%Y %H:%i:%S")) 

予想したように、それは

2005-11-08 

次のクエリでも作品を返すの作品

select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S")) 

予想したように、それは

を返します。
NULL 

私は警告があることに注意すべきであるが、それは

show warnings 

利回り

enter image description here

NULL結果を実行して返すからクエリを停止しません。しかし、問題は場合に発生します私は結果からテーブルを作成しようとします。

これは

CREATE TABLE myTable AS select date(str_to_date("08-Nov-2005 22:07","%d-%M-%Y %H:%i:%S")) 

に動作します。しかし、これは

CREATE TABLE myTable AS select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S")) 

エラーメッセージが

Incorrect datetime value: 'XXXX' for function str_to_date 

これは非常に単純なおもちゃの例ですが、私は多くを作成しようとしていますされていません多くの日付値が正しく解析された大きなテーブルで、同じ効果があります。

私は間違っていますか?

答えて

2

あなたが見る行動は、あなたが厳密にSQL_MODEで実行していることを意味します(これは一般的には良い考えです)。

あなたのセッションにあまり厳格でないSQL_MODEを設定することで、あなたが望むものを達成することができます。ここで

STRICT_ALL_TABLESモードでのMySQL 5.7の中に失敗し、あなたのCREATE TABLE声明を示す一例だが、私はその制限を削除した後、後続:それは、システムの設定や抑制の警告に関係している場合

mysql> select @@session.sql_mode; 
+--------------------+ 
| @@session.sql_mode | 
+--------------------+ 
| STRICT_ALL_TABLES | 
+--------------------+ 
1 row in set (0.00 sec) 

mysql> CREATE TABLE myTable AS select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S")); 
ERROR 1411 (HY000): Incorrect datetime value: 'XXXX' for function str_to_date 

mysql> set session sql_mode = ''; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TABLE myTable AS select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S")); 
Query OK, 1 row affected, 1 warning (0.02 sec) 
Records: 1 Duplicates: 0 Warnings: 1 

mysql> select * from myTable; 
+-----------------------------------------------+ 
| date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S")) | 
+-----------------------------------------------+ 
| NULL           | 
+-----------------------------------------------+ 
1 row in set (0.01 sec) 
+0

ありがとう!これは私にとって問題だった – kane

+0

はい...私にとっても問題でした。ありがとう! – daticon

0

上記のクエリを両方ともうまく試してみると、うまく動作しているようです。 2番目のクエリに挿入される値は、あなたが期待していたものであるNULLだけです。

+0

のだろうか。私はMySQLのOSXでMySQL 5.6を持っています – kane

+0

まあ、私はWindowsでそれを試しました、MySQL 5.6.26 ... –

関連する問題