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

แปลง DATETIME เป็น DATE ใน MySQL ด้วย CAST()

เมื่อต้องการดึงเฉพาะส่วนวันที่ (Date) จากคอลัมน์ชนิด DATETIME หรือ TIMESTAMP ให้ใช้ฟังก์ชัน CAST() หรือ DATE()

รูปแบบคำสั่งด้วย CAST()

SELECT CAST(yourColumnName AS DATE) AS anyVariableName 
FROM yourTableName;

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

1. สร้างตารางและเพิ่มข้อมูล DATETIME

mysql> CREATE TABLE ConvertDatetimeToDate (
    -> YourDatetime DATETIME
    -> );
Query OK, 0 rows affected (0.95 sec)

mysql> INSERT INTO ConvertDatetimeToDate VALUES (DATE_ADD(NOW(), INTERVAL 1 DAY));
mysql> INSERT INTO ConvertDatetimeToDate VALUES (DATE_ADD(NOW(), INTERVAL -1 DAY));
mysql> INSERT INTO ConvertDatetimeToDate VALUES (DATE_ADD(NOW(), INTERVAL 1 YEAR));
mysql> INSERT INTO ConvertDatetimeToDate VALUES (DATE_ADD(NOW(), INTERVAL -1 YEAR));

2. ดูข้อมูลดิบ

mysql> SELECT * FROM ConvertDatetimeToDate;
+---------------------+
| YourDatetime        |
+---------------------+
| 2018-11-28 16:12:50 |
| 2018-11-26 16:13:00 |
| 2019-11-27 16:13:13 |
| 2017-11-27 16:13:24 |
+---------------------+
4 rows in set (0.00 sec)

3. แปลงเป็น DATE ด้วย CAST()

mysql> SELECT CAST(YourDatetime AS DATE) AS OnlyDateDemo 
    -> FROM ConvertDatetimeToDate;
+--------------+
| OnlyDateDemo |
+--------------+
| 2018-11-28   |
| 2018-11-26   |
| 2019-11-27   |
| 2017-11-27   |
+--------------+
4 rows in set (0.00 sec)

วิธีอื่น: ใช้ DATE()

SELECT DATE(YourDatetime) AS OnlyDateDemo FROM ConvertDatetimeToDate;

ทั้ง CAST(... AS DATE) และ DATE() ให้ผลลัพธ์เหมือนกัน แต่ DATE() เขียนสั้นกว่าและอ่านง่ายกว่า

กรณีใช้ใน WHERE Clause

SELECT * FROM orders 
WHERE DATE(order_datetime) = '2024-01-15';

คำเตือน: การใช้ฟังก์ชันกับคอลัมน์ใน WHERE จะทำให้ Index ไม่ทำงาน ควรเปลี่ยนเป็น Range Query แทน:

WHERE order_datetime >= '2024-01-15' AND order_datetime < '2024-01-16'