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

MySQL: แปลงรูปแบบวันที่แบบ "Jan 2017" เป็นวันที่เต็ม YYYY-MM-DD

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

mysql> create table DemoTable1985 ( DueDate varchar(20) );
mysql> insert into DemoTable1985 values('Jan 2017');
mysql> insert into DemoTable1985 values('May 2018');
mysql> insert into DemoTable1985 values('Aug 2015');

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

+----------+
| DueDate  |
+----------+
| Jan 2017 |
| May 2018 |
| Aug 2015 |
+----------+

Query แปลงรูปแบบ

ใช้ STR_TO_DATE แปลงสตริงเป็น DATE แล้ว DATE_FORMAT จัดรูปแบบใหม่:

mysql> select date_format(str_to_date(DueDate, '%b %Y'), '%Y-%m-01') as Result from DemoTable1985;

ผลลัพธ์

+------------+
| Result     |
+------------+
| 2017-01-01 |
| 2018-05-01 |
| 2015-08-01 |
+------------+

อธิบายขั้นตอน

  1. STR_TO_DATE(DueDate, '%b %Y'): แปลง "Jan 2017" → DATE '2017-01-01' (วันจะกลายเป็น 1 อัตโนมัติ)
  2. DATE_FORMAT(..., '%Y-%m-01'): จัดรูปแบบเป็น 'YYYY-MM-01' (ต้องการวันที่ 1 ของเดือนนั้น)

Format Specifiers สำหรับเดือน

Specifierความหมายตัวอย่าง
%bชื่อเดือนย่อ 3 ตัวอักษร (Jan, Feb...)Jan
%Mชื่อเดือนเต็ม (January, February...)January
%mเดือน 2 หลัก (01-12)01
%cเดือน 1-2 หลัก (1-12)1

กรณีข้อมูลหลากหลายรูปแบบ

-- รองรับทั้ง "Jan 2017" และ "January 2017"
SELECT DATE_FORMAT(
    COALESCE(
        STR_TO_DATE(DueDate, '%b %Y'),
        STR_TO_DATE(DueDate, '%M %Y')
    ), '%Y-%m-01'
) FROM DemoTable1985;

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

ALTER TABLE DemoTable1985 ADD COLUMN DueDateConverted DATE;
UPDATE DemoTable1985 SET DueDateConverted = STR_TO_DATE(DueDate, '%b %Y');