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

การแปลงสตริงวันที่รูปแบบจุด (DD.MM.YYYY) เป็น DATE ใน MySQL

เมื่อมีข้อมูลวันที่เก็บเป็น VARCHAR ในรูปแบบที่มีจุดคั่น (เช่น '01.10.2019') สามารถแปลงเป็นชนิดข้อมูล DATE ได้โดยใช้ฟังก์ชัน STR_TO_DATE() ระบุ Format Specifier ให้ตรงกับรูปแบบข้อมูล

ตัวอย่างการใช้งาน

สร้างตารางเก็บวันที่เป็นข้อความ:

mysql> CREATE TABLE DemoTable1445 (AdmissionDate VARCHAR(20));

เพิ่มข้อมูลรูปแบบ DD.MM.YYYY:

mysql> INSERT INTO DemoTable1445 VALUES ('01.10.2019');
mysql> INSERT INTO DemoTable1445 VALUES ('31.12.2018');
mysql> INSERT INTO DemoTable1445 VALUES ('01.02.2017');

ดูข้อมูลก่อนแปลง:

mysql> SELECT * FROM DemoTable1445;
+---------------+
| AdmissionDate |
+---------------+
| 01.10.2019    |
| 31.12.2018    |
| 01.02.2017    |
+---------------+

แปลงและอัปเดตคอลัมน์เดียวกัน (In-place):

mysql> UPDATE DemoTable1445 
    -> SET AdmissionDate = STR_TO_DATE(AdmissionDate, '%d.%m.%Y');

ผลลัพธ์ (กลายเป็น DATE รูปแบบมาตรฐาน YYYY-MM-DD):

mysql> SELECT * FROM DemoTable1445;
+---------------+
| AdmissionDate |
+---------------+
| 2019-10-01    |
| 2018-12-31    |
| 2017-02-01    |
+---------------+

Format Specifiers ที่ใช้

Specifierความหมายตัวอย่าง
%dวัน 2 หลัก (01-31)01, 31
%mเดือน 2 หลัก (01-12)01, 12
%Yปี 4 หลัก2019
%.จุดตรงตัว (Literal dot).

รูปแบบ '%d.%m.%Y' ตรงกับ DD.MM.YYYY

รูปแบบวันที่ยอดนิยมและ Specifiers

รูปแบบข้อมูลFormat String
DD/MM/YYYY'%d/%m/%Y'
MM/DD/YYYY'%m/%d/%Y'
YYYY-MM-DD'%Y-%m-%d'
DD Mon YYYY'%d %b %Y'
DD Month YYYY'%d %M %Y'
DD.MM.YYYY HH:MM:SS'%d.%m.%Y %H:%i:%s'

คำแนะนำ

  • หลังแปลงแล้ว ควร ALTER TABLE ... MODIFY AdmissionDate DATE เพื่อเปลี่ยนชนิดข้อมูลเป็น DATE จริง
  • STR_TO_DATE คืนค่า NULL หากรูปแบบไม่ตรง → ตรวจสอบข้อมูลก่อน UPDATE
  • ใช้ SELECT STR_TO_DATE(col, fmt) FROM t WHERE STR_TO_DATE(col, fmt) IS NULL หาข้อมูลผิดรูปแบบ
  • MySQL 8.0+ รองรับ CAST(str AS DATE) สำหรับรูปแบบ ISO (YYYY-MM-DD) โดยไม่ต้องระบุ Format