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

แปลงสตริงเป็น Datetime รูปแบบ 24 ชั่วโมงใน MySQL ด้วย STR_TO_DATE

เมื่อมีข้อมูลวันที่/เวลาเก็บเป็น VARCHAR/Text ต้องการแปลงเป็นชนิดข้อมูล DATETIME จริง (24-hour Format) ให้ใช้ STR_TO_DATE() กำหนด Format Pattern

Syntax

SELECT STR_TO_DATE(yourColumnName, '%Y-%m-%d %H:%i:%s') FROM yourTableName;

Format Specifiers

Specifierความหมายตัวอย่าง
%Yปี 4 หลัก2024
%mเดือน 01-1201, 12
%dวัน 01-3101, 31
%Hชั่วโมง 00-23 (24h)15, 00
%h / %Iชั่วโมง 01-12 (12h)03, 12
%iนาที 00-5945, 00
%sวินาที 00-5923, 00
%pAM/PMAM, PM

สร้างตารางและข้อมูล String

mysql> create table DemoTable (ArrivalDate varchar(200));
mysql> insert into DemoTable values
('2019-01-31 15:45:23'),('2012-12-12 20:30:26'),
('2016-06-07 21:04:05'),('2017-02-03 19:24:32');

คำสั่งแปลงเป็น DATETIME

mysql> select str_to_date(ArrivalDate, '%Y-%m-%d %H:%i:%s') AS `24HourFormat` from DemoTable;

ผลลัพธ์ (ชนิด DATETIME)

+---------------------+
| 24HourFormat        |
+---------------------+
| 2019-01-31 15:45:23 |
| 2012-12-12 20:30:26 |
| 2016-06-07 21:04:05 |
| 2017-02-03 19:24:32 |
+---------------------+

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

Input FormatPatternตัวอย่าง
YYYY-MM-DD%Y-%m-%d2024-12-31
DD/MM/YYYY%d/%m/%Y31/12/2024
MM/DD/YYYY%m/%d/%Y12/31/2024
DD-MM-YYYY HH:MI%d-%m-%Y %H:%i31-12-2024 15:30
YYYYMMDD%Y%m%d20241231

คำเตือน

  • Format Pattern ต้อง ตรงกับข้อมูลทุกตัวอักษร (รวม -, /, space, :)
  • ข้อมูลไม่ตรง Pattern → คืน NULL
  • ใช้ WHERE STR_TO_DATE(col, pattern) IS NOT NULL กรองข้อมูลผิด
  • MySQL 8.0+ มี CAST(col AS DATETIME) สำหรับรูปแบบมาตรฐาน ISO 8601

แปลงกลับ: DATETIME → String (DATE_FORMAT)

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 2024-12-31 15:30:45