Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Có hàm tương tự TRUNC(SYSDATE) của Oracle trong MySQL không?

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:

OracleMySQLChứ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
SYSDATENOW()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