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

MySQL: แปลงรูปแบบวันที่ด้วย STR_TO_DATE()

สร้างตารางและข้อมูลตัวอย่าง

mysql> create table DemoTable2010 ( DueDate varchar(20) );
mysql> insert into DemoTable2010 values('12/10/2019 12:34:00');
mysql> insert into DemoTable2010 values('12/12/2011 11:00:20');
mysql> insert into DemoTable2010 values('31/01/2017 11:00:20');

ข้อมูลก่อนแปลง (DD/MM/YYYY HH:MM:SS)

+---------------------+
| DueDate             |
+---------------------+
| 12/10/2019 12:34:00 |
| 12/12/2011 11:00:20 |
| 31/01/2017 11:00:20 |
+---------------------+

Query แปลงรูปแบบ

ใช้ STR_TO_DATE(สตริง, รูปแบบ) รูปแบบ '%d/%m/%Y %k:%i':

mysql> select str_to_date(DueDate, '%d/%m/%Y %k:%i') from DemoTable2010;

ผลลัพธ์ (YYYY-MM-DD HH:MM:SS)

+---------------------------------------+
| str_to_date(DueDate, '%d/%m/%Y %k:%i') |
+---------------------------------------+
| 2019-10-12 12:34:00                   |
| 2011-12-12 11:00:00                   |
| 2017-01-31 11:00:00                   |
+---------------------------------------+

อธิบาย Format Specifiers

Specifierความหมายตัวอย่าง
%dวัน (00-31)12, 31
%mเดือน (00-12)10, 01
%Yปี 4 หลัก2019, 2017
%kชั่วโมง 0-23 (ไม่ leading zero)12, 11
%Hชั่วโมง 00-23 (มี leading zero)12, 11
%iนาที (00-59)34, 00
%sวินาที (00-59)(ไม่ได้ใช้ในตัวอย่าง)

หมายเหตุเกี่ยวกับ Warning

ผลลัพธ์แสดง 3 warnings อาจมาจาก:

  • รูปแบบเวลา %k:%i ไม่รวมวินาที แต่ข้อมูลมีวินาที (:20)
  • ควรใช้ '%d/%m/%Y %H:%i:%s' เพื่อความแม่นยำ

Query แปลงแล้วเก็บลงคอลัมน์ DATETIME

ALTER TABLE DemoTable2010 ADD COLUMN DueDateConverted DATETIME;
UPDATE DemoTable2010 SET DueDateConverted = STR_TO_DATE(DueDate, '%d/%m/%Y %H:%i:%s');

ฟังก์ชันคู่: DATE_FORMAT

ทำตรงข้าม: DATE_FORMAT(date, format) → แปลง DATE เป็น String

SELECT DATE_FORMAT(NOW(), '%d/%m/%Y %H:%i:%s'); -- 20/12/2019 14:30:00