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

แสดงวันที่รูปแบบ DD/MM/YYYY ใน MySQL ด้วย STR_TO_DATE และ DATE_FORMAT

MySQL เก็บวันที่ในรูปแบบ YYYY-MM-DD (ISO 8601) แต่การแสดงผลให้ผู้ใช้มักต้องการรูปแบบ DD/MM/YYYY ใช้ DATE_FORMAT() สำหรับการแสดงผล และ STR_TO_DATE() สำหรับการแปลงข้อความเข้า DB

1. แสดงผล (SELECT) - ใช้ DATE_FORMAT()

SELECT DATE_FORMAT(yourDateColumn, '%d/%m/%Y') AS formatted_date 
FROM yourTableName;

2. แปลงข้อความเข้า DB (INSERT/UPDATE) - ใช้ STR_TO_DATE()

INSERT INTO yourTableName (date_col) 
VALUES (STR_TO_DATE('26/11/2018', '%d/%m/%Y'));

ตัวอย่างสมบูรณ์

สร้างตารางเก็บวันที่เป็น VARCHAR (จำลองข้อมูลนำเข้า)

mysql> CREATE TABLE DateFormatDemo (IssueDate VARCHAR(100));
Query OK, 0 rows affected (0.54 sec)

mysql> INSERT INTO DateFormatDemo VALUES 
    -> ('26/11/2018'), ('27/11/2018'), ('2/12/2018'), ('3/12/2018');

ดูข้อมูลดิบ

mysql> SELECT * FROM DateFormatDemo;
+------------+
| IssueDate  |
+------------+
| 26/11/2018 |
| 27/11/2018 |
| 2/12/2018  |
| 3/12/2018  |
+------------+
4 rows in set (0.00 sec)

แปลงเป็น DATE ด้วย STR_TO_DATE

mysql> SELECT STR_TO_DATE(IssueDate, '%d/%m/%Y') AS StringToDateFormatExample 
    -> FROM DateFormatDemo;
+---------------------------+
| StringToDateFormatExample |
+---------------------------+
| 2018-11-26                |
| 2018-11-27                |
| 2018-12-02                |
| 2018-12-03                |
+---------------------------+
4 rows in set (0.00 sec)

แสดงผลเป็น DD/MM/YYYY ด้วย DATE_FORMAT

mysql> SELECT DATE_FORMAT(STR_TO_DATE(IssueDate, '%d/%m/%Y'), '%d/%m/%Y') AS ThaiFormat
    -> FROM DateFormatDemo;
+------------+
| ThaiFormat |
+------------+
| 26/11/2018 |
| 27/11/2018 |
| 02/12/2018 |
| 03/12/2018 |
+------------+
4 rows in set (0.00 sec)

รูปแบบวันที่ไทยที่นิยม

รูปแบบFormat Stringตัวอย่าง
DD/MM/YYYY%d/%m/%Y26/11/2018
D/M/YYYY%e/%c/%Y26/11/2018
DD-MM-YYYY%d-%m-%Y26-11-2018
DD MMM YYYY%d %b %Y26 Nov 2018
วัน DD เดือน MMMM ปี YYYYต้องใช้ CASE/ELTวันจันทร์ที่ 26 พฤศจิกายน 2561

แปลงเป็น พ.ศ. (Buddhist Era)

SELECT DATE_FORMAT(date_col, '%d/%m/%Y') AS AD_Date,
       CONCAT(DATE_FORMAT(date_col, '%d/%m/'), YEAR(date_col) + 543) AS BE_Date
FROM your_table;

Best Practice

  • เก็บใน DB เป็น DATE / DATETIME (ISO Format)
  • แปลงรูปแบบเฉพาะตอนแสดงผล (Presentation Layer)
  • Application Layer ควรทำ Formatting แทน DB (ยกเว็กรายงาน直由 DB)