MySQLテーブルへの挿入時に発生する「Incorrect datetime value」エラーの修正方法
MySQLの「Incorrect datetime value」エラーとは
MySQLのテーブルに日時データを挿入する際、「ERROR 1292: Incorrect datetime value」というエラーが発生することがあります。このエラーを回避するには、STR_TO_DATE() 関数を使用するのが最も効果的です。
MySQLにおけるDATETIME型の標準フォーマットは「YYYY-MM-DD HH:MM:SS」です。これと異なる形式(例:DD/MM/YYYY)の日時を挿入しようとすると、エラーが発生します。
エラーが発生するケース
まず、検証用のテーブルを作成してみましょう。テーブル作成のクエリは以下の通りです。
mysql> create table CorrectDatetimeDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ArrivalTime datetime
-> );
Query OK, 0 rows affected (0.63 sec)
次に、誤った形式の日時を挿入してみます。
mysql> insert into CorrectDatetimeDemo(ArrivalTime) values('18/02/2019 11:15:45');
ERROR 1292 (22007): Incorrect datetime value: '18/02/2019 11:15:45' for column 'ArrivalTime' at row 1
「18/02/2019 11:15:45」はDD/MM/YYYY形式で記述されているため、MySQLが期待するYYYY-MM-DD形式と一致せず、エラーとなってしまいます。
STR_TO_DATE()関数による解決方法
この問題を回避するには、STR_TO_DATE()関数を使って文字列を正しい日時形式に変換してから挿入します。構文は以下の通りです。
INSERT INTO yourTableName(yourDateTimeColumnName)
VALUES (STR_TO_DATE('yourDateTimeValue','%d/%m/%Y %H:%i:%s'));
それでは、上記の構文に従って日時データを実際に挿入してみましょう。
mysql> insert into CorrectDatetimeDemo(ArrivalTime) values(STR_TO_DATE('18/02/2019 11:15:45','%d/%m/%Y %H:%i:%s'));
Query OK, 1 row affected (0.21 sec)
mysql> insert into CorrectDatetimeDemo(ArrivalTime) values(STR_TO_DATE('15/01/2017 10:10:15','%d/%m/%Y %H:%i:%s'));
Query OK, 1 row affected (0.16 sec)
mysql> insert into CorrectDatetimeDemo(ArrivalTime) values(STR_TO_DATE('12/04/2016 15:30:35','%d/%m/%Y %H:%i:%s'));
Query OK, 1 row affected (0.20 sec)
挿入結果の確認
SELECT文ですべてのレコードを表示して確認します。
mysql> select *from CorrectDatetimeDemo;
実行結果は以下の通りです。
+----+---------------------+ | Id | ArrivalTime | +----+---------------------+ | 1 | 2019-02-18 11:15:45 | | 2 | 2017-01-15 10:10:15 | | 3 | 2016-04-12 15:30:35 | +----+---------------------+ 3 rows in set (0.00 sec)
ご覧の通り、「DD/MM/YYYY HH:MM:SS」形式で入力した日時が、MySQL標準の「YYYY-MM-DD HH:MM:SS」形式へ自動的に変換されて正常に格納されています。
まとめ
DATETIME型カラムへの挿入時に「Incorrect datetime value」エラーが発生した場合は、次の対処法を検討しましょう。
- STR_TO_DATE()関数を使用する:挿入前に文字列を正しい日時形式へ変換する
- フォーマット指定子を適切に設定する:%d(日)、%m(月)、%Y(年)、%H(時)、%i(分)、%s(秒)など、入力データの形式に合わせて指定する
- 標準形式でデータを用意する:可能であれば、最初から「YYYY-MM-DD HH:MM:SS」形式で挿入するのが確実
-
MySQLで製品テーブルから製品の合計金額を計算する方法
MySQLで製品テーブルから合計金額を算出する手順 在庫管理や売上集計などの場面では、「数量 × 単価」の合計値を求めたいケースがよくあります。MySQLでは SUM() 関数と乗算を組み合わせることで、この計算を1つのSQLクエリで簡単に実現できます。 ここでは、サンプルテーブルを作成し、実際に合計金額を計算するまでの手順を解説します。 1. テーブルの作成 まず、製品ID・数量・単価を持つテーブルを作成します。 mysql> create table DemoTable ( ProductId int NOT NULL AUTO_INCREMENT PRIMARY
-
MySQLでテーブルの構造を複製する方法|LIKE句を使った手順を解説
MySQLで既存テーブルと同じ構造を持つ新しいテーブルを作成(複製)したい場合は、LIKE句を使用します。この記事では、実際にサンプルテーブルを作成しながら、テーブル構造を複製する具体的な手順をわかりやすく解説します。1. 元となるテーブルを作成するまずは複製元となるサンプルテーブルを作成しましょう。ここでは学生IDと学生名を格納するテーブルを定義します。mysql> create table DemoTable1-> (-> StudentId int,-> StudentName varchar(20)-> );Query OK, 0 rows affecte