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

แปลง MM/YY เป็น YYYY-MM-DD พร้อมกำหนดวันใน MySQL

ฟังก์ชัน STR_TO_DATE()

แปลงสตริงเป็น DATE ตามรูปแบบที่ระบุ

STR_TO_DATE(string, format)

ไวยากรณ์สำหรับ MM/YY + วันคงที่

SELECT STR_TO_DATE(CONCAT('yourDay/', yourColumn), '%d/%m/%y')
FROM yourTable;

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

CREATE TABLE demo46 (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    short_date VARCHAR(20)
);

INSERT INTO demo46 (short_date) VALUES
('09/18'), ('12/20'), ('11/20');

ข้อมูล

+----+------------+
| id | short_date |
+----+------------+
| 1  | 09/18      |
| 2  | 12/20      |
| 3  | 11/20      |
+----+------------+

คำสั่ง: แปลงเป็นวันที่เต็ม โดยกำหนดวัน = 24

SELECT STR_TO_DATE(CONCAT('24/', short_date), '%d/%m/%y') AS Convert_In_Full_Date
FROM demo46;

ผลลัพธ์

+----------------------+
| Convert_In_Full_Date |
+----------------------+
| 2018-09-24           |
| 2020-12-24           |
| 2020-11-24           |
+----------------------+

รูปแบบ Format Specifiers

Specifierความหมายตัวอย่าง
%dวัน (00-31)24
%mเดือน (01-12)09
%yปี 2 หลัก (00-99)18 → 2018
%Yปี 4 หลัก2018
%H:%i:%sเวลา 24 ชม.14:30:05

กฎการแปลงปี 2 หลัก (%y)

  • 00-69 → 2000-2069
  • 70-99 → 1970-1999
  • ดังนั้น '09/18' → 2018, '07/95' → 1995

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

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

SELECT STR_TO_DATE(CONCAT('01/', short_date), '%d/%m/%y') FROM demo46;

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

SELECT LAST_DAY(STR_TO_DATE(CONCAT('01/', short_date), '%d/%m/%y')) FROM demo46;

ข้อควรระวัง

  • STR_TO_DATE คืนค่า DATE (ไม่มีเวลา) — ใช้ CAST(... AS DATETIME) หากต้องการ DATETIME
  • ข้อมูล input ต้องตรง format ที่ระบุ ไม่เช่นนั้นคืน NULL
  • MySQL 8.0: ใช้ TO_DATE() (alias ของ STR_TO_DATE) ได้เช่นกัน