Tương đương TRUNC(SYSDATE) của Oracle trong MySQL
MySQL cung cấp hai hàm liên quan:
CURDATE(): Trả về ngày hiện tại (nguyên ngày, không giờ)DATE(datetime): Trích xuất phần ngày từ datetime
Ngày hiện tại
mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-10-20 | +------------+
Tạo bảng và dữ liệu
mysql> create table DemoTable1613 ( PostingDate datetime ); Query OK, 0 rows affected (0.48 sec)
mysql> insert into DemoTable1613 values('2019-10-20 12:02:45');
mysql> insert into DemoTable1613 values('2018-10-20 12:02:45');
mysql> insert into DemoTable1613 values('2015-10-20 12:02:45');
mysql> insert into DemoTable1613 values('2019-10-20 10:00:00');
Truy vấn lọc bài đăng hôm nay (tương đương TRUNC(SYSDATE))
mysql> select * from DemoTable1613 where date(PostingDate)=curdate();
Kết quả
+---------------------+ | PostingDate | +---------------------+ | 2019-10-20 12:02:45 | | 2019-10-20 10:00:00 | +---------------------+
So sánh Oracle vs MySQL:
| Oracle | MySQL | Chức năng |
|---|---|---|
| TRUNC(SYSDATE) | CURDATE() | Ngày hiện tại (00:00:00) |
| TRUNC(date_col) | DATE(date_col) | Lấy phần ngày từ datetime |
| SYSDATE | NOW() | Ngày giờ hiện tại |
Mẹo hiệu năng: Tránh dùng function trên cột trong WHERE (như DATE(PostingDate)) nếu bảng lớn. Thay vào đó dùng range:
WHERE PostingDate >= CURDATE() AND PostingDate < CURDATE() + INTERVAL 1 DAY