Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

แก้ไขข้อผิดพลาดค่า datetime ไม่ถูกต้องเมื่อ INSERT ใน MySQL

ข้อผิดพลาด Incorrect datetime value เกิดจากการ INSERT วันที่ในรูปแบบที่ MySQL ไม่รองรับ (MySQL ต้องการ YYYY-MM-DD HH:MM:SS) ใช้ STR_TO_DATE() แปลงรูปแบบก่อน INSERT

รูปแบบคำสั่ง

INSERT INTO yourTable(yourDateTimeColumn) VALUES (STR_TO_DATE('yourDateString', 'format'));

ตัวอย่างปัญหาและแก้ไข

1. สร้างตาราง

mysql> create table CorrectDatetimeDemo (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> ArrivalTime datetime
    -> );

2. INSERT รูปแบบผิด (DD/MM/YYYY) → Error

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

3. ใช้ STR_TO_DATE() แปลงรูปแบบ

mysql> insert into CorrectDatetimeDemo(ArrivalTime) values(STR_TO_DATE('18/02/2019 11:15:45', '%d/%m/%Y %H:%i:%s'));
mysql> insert into CorrectDatetimeDemo(ArrivalTime) values(STR_TO_DATE('15/01/2017 10:10:15', '%d/%m/%Y %H:%i:%s'));
mysql> insert into CorrectDatetimeDemo(ArrivalTime) values(STR_TO_DATE('12/04/2016 15:30:35', '%d/%m/%Y %H:%i:%s'));

4. ผลลัพธ์เก็บเป็นรูปแบบมาตรฐาน

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 |
+----+---------------------+

รูปแบบ Format Specifiers ที่ใช้บ่อย

Specifierความหมายตัวอย่าง
%dวัน (00-31)18
%mเดือน (00-12)02
%Yปี 4 หลัก2019
%Hชั่วโมง 24 ชม. (00-23)11
%iนาที (00-59)15
%sวินาที (00-59)45

รูปแบบวันที่ไทยที่พบบ่อย

  • %d/%m/%Y %H:%i:%s → 18/02/2019 11:15:45
  • %d-%m-%Y → 18-02-2019
  • %Y-%m-%d → 2019-02-18 (มาตรฐาน ISO/MySQL)