การแปลงรูปแบบวันที่จาก dd/mm/yyyy เป็น yyyymmdd ใน MySQL
ใช้ STR_TO_DATE() อ่าน Format ต้นทาง แล้ว DATE_FORMAT() เขียน Format ปลายทาง
SELECT DATE_FORMAT(STR_TO_DATE(yourColumn, '%d/%m/%Y'), '%Y%m%d') FROM yourTable;
ตัวอย่างการใช้งาน
สร้างตารางเก็บวันที่แบบ String (dd/mm/yyyy):
mysql> create table DemoTable (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Admissiondate varchar(200));
mysql> insert into DemoTable(Admissiondate) values('21/10/2014');
mysql> insert into DemoTable(Admissiondate) values('01/12/2016');
mysql> insert into DemoTable(Admissiondate) values('31/01/2017');
ข้อมูลต้นฉบับ:
+----+---------------+ | Id | Admissiondate | +----+---------------+ | 1 | 21/10/2014 | | 2 | 01/12/2016 | | 3 | 31/01/2017 | +----+---------------+
คิวรีแปลงเป็น yyyymmdd:
mysql> select date_format(str_to_date(Admissiondate, '%d/%m/%Y'), '%Y%m%d') from DemoTable;
+-------------------------------------------------------------+ | date_format(str_to_date(Admissiondate, '%d/%m/%Y'), '%Y%m%d') | +-------------------------------------------------------------+ | 20141021 | | 20161201 | | 20170131 | +-------------------------------------------------------------+
Format Specifiers:
%d- วัน 2 หลัก (01-31)%m- เดือน 2 หลัก (01-12)%Y- ปี 4 หลัก%y- ปี 2 หลัก
แปลงกลับ (yyyymmdd → dd/mm/yyyy):
DATE_FORMAT(STR_TO_DATE(dateStr, '%Y%m%d'), '%d/%m/%Y')
แนะนำ: เก็บวันที่ในชนิด DATE หรือ DATETIME โดยตรง แทน String จะ Query/Sort/Index ได้ดีกว่ามาก