การแยก DATE และ TIME จาก DATETIME
MySQL มีฟังก์ชัน CAST() หรือฟังก์ชันเฉพาะทาง DATE() และ TIME() สำหรับแยกส่วนประกอบของ DATETIME
ตัวอย่าง: ตารางเก็บวันเวลา Login
mysql> create table DemoTable805(LoginDate datetime);
Query OK, 0 rows affected (0.63 sec)
mysql> insert into DemoTable805 values('2019-01-31 12:45:20');
mysql> insert into DemoTable805 values('2017-11-01 10:20:30');
mysql> insert into DemoTable805 values('2016-03-12 04:10:00');
mysql> insert into DemoTable805 values('2018-12-24 05:01:00');
วิธีที่ 1: ใช้ CAST()
mysql> select cast(LoginDate AS date), cast(LoginDate AS time) from DemoTable805;
วิธีที่ 2: ใช้ DATE() และ TIME() (แนะนำ)
mysql> select DATE(LoginDate) as LoginDate, TIME(LoginDate) as LoginTime from DemoTable805;
ผลลัพธ์ทั้งสองวิธีเหมือนกัน:
+-------------------------+-------------------------+
| cast(LoginDate AS date) | cast(LoginDate AS Time) |
+-------------------------+-------------------------+
| 2019-01-31 | 12:45:20 |
| 2017-11-01 | 10:20:30 |
| 2016-03-12 | 04:10:00 |
| 2018-12-24 | 05:01:00 |
+-------------------------+-------------------------+
การเปรียบเทียบวันที่และเวลาแยกกัน
-- หาวันที่ Login เป็นวันที่ 31 มกราคม
select * from DemoTable805 where DATE(LoginDate) = '2019-01-31';
-- หาเวลา Login ระหว่าง 10:00-12:00
select * from DemoTable805 where TIME(LoginDate) between '10:00:00' and '12:00:00';
สรุป
- ใช้
DATE()และTIME()สำหรับอ่านง่ายและเป็นมาตรฐาน - ใช้
CAST(... AS DATE)ก็ได้ แต่ verbose กว่า - สามารถใช้ใน WHERE clause เพื่อกรองเฉพาะวันที่หรือเวลาได้