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

แปลง MM/YY เป็น YYYY-MM-DD ใน MySQL ด้วย STR_TO_DATE

ฟังก์ชัน STR_TO_DATE()

STR_TO_DATE(string, format)

ตัวอย่าง: ตาราง demo72

CREATE TABLE demo72 (due_date VARCHAR(40));

INSERT INTO demo72 VALUES ('11/15'), ('02/20'), ('07/95');

ข้อมูล

+----------+
| due_date |
+----------+
| 11/15    |
| 02/20    |
| 07/95    |
+----------+

คำสั่ง: แปลง MM/YY → YYYY-MM-DD โดยกำหนดวัน = 10

SELECT STR_TO_DATE(CONCAT('10/', due_date), '%d/%m/%y') AS original_date
FROM demo72;

ผลลัพธ์

+---------------+
| original_date |
+---------------+
| 2015-11-10    |
| 2020-02-10    |
| 1995-07-10    |
+---------------+

อธิบาย Format '%d/%m/%y'

ส่วนความหมายตัวอย่าง Input
%dวัน (Day)10 (จาก CONCAT)
/ตัวคั่นตรงตัว/
%mเดือน 2 หลัก (01-12)11, 02, 07
/ตัวคั่นตรงตัว/
%yปี 2 หลัก (00-99)15, 20, 95

กฎปี 2 หลัก (%y)

  • 00-69 → 2000-2069
  • 70-99 → 1970-1999
  • ดังนั้น '95' → 1995, '20' → 2020

กรณีศึกษา: วันแรก/สุดท้ายของเดือน

วันแรกของเดือน

SELECT STR_TO_DATE(CONCAT('01/', due_date), '%d/%m/%y') FROM demo72;
+--------------------------------------------------------+
| STR_TO_DATE(CONCAT('01/', due_date), '%d/%m/%y')       |
+--------------------------------------------------------+
| 2015-11-01                                             |
| 2020-02-01                                             |
| 1995-07-01                                             |
+--------------------------------------------------------+

วันสุดท้ายของเดือน (LAST_DAY)

SELECT LAST_DAY(STR_TO_DATE(CONCAT('01/', due_date), '%d/%m/%y')) FROM demo72;
+----------------------------------------------------------------------+
| LAST_DAY(STR_TO_DATE(CONCAT('01/', due_date), '%d/%m/%y'))          |
+----------------------------------------------------------------------+
| 2015-11-30                                                           |
| 2020-02-29                                                           |
| 1995-07-31                                                           |
+----------------------------------------------------------------------+

ข้อผิดพลาดที่พบบ่อย

ข้อผิดพลาดสาเหตุแก้ไข
คืน NULLFormat ไม่ตรง Input (เช่น '1/15' vs '%d/%m/%y')ใช้ LPAD: CONCAT('10/', LPAD(due_date, 5, '0'))
ปีผิดเข้าใจ %y ผิด (คิดว่า 95 = 2095)จำกฎ 70-99 = 19xx
เดือน > 12ข้อมูลผิดพลาดValidate ก่อน INSERT

MySQL 8.0: TO_DATE() Alias

SELECT TO_DATE(CONCAT('10/', due_date), '%d/%m/%y') FROM demo72;