CURDATE() 回傳目前日期 (YYYY-MM-DD),配合 YEAR()、MONTH()、DAY()、DAYOFMONTH() 可快速拆解日期成分,無需傳遞參數。
SELECT YEAR(CURDATE()); -- 2023
SELECT MONTH(CURDATE()); -- 10
SELECT DAY(CURDATE()); -- 15
SELECT DAYOFMONTH(CURDATE()); -- 15 (同 DAY)
SELECT CURDATE(); -- 2023-10-15
-- 本月資料
SELECT * FROM orders
WHERE YEAR(order_date) = YEAR(CURDATE())
AND MONTH(order_date) = MONTH(CURDATE());
-- 今天資料
SELECT * FROM logs
WHERE log_date = CURDATE();
-- 近 7 天 (含今天)
SELECT * FROM events
WHERE event_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 DAY) AND CURDATE();
| 函數 | 回傳值 | 範例 |
|---|---|---|
NOW() / SYSDATE() | 日期時間 (YYYY-MM-DD HH:MM:SS) | 2023-10-15 14:30:00 |
CURTIME() | 時間 (HH:MM:SS) | 14:30:00 |
DATE(NOW()) | 等同 CURDATE() | 2023-10-15 |
LAST_DAY(date) | 該月最後一天日期 | 2023-10-31 |
QUARTER(date) | 季度 (1-4) | 4 |
WEEKDAY(date) | 週幾 (0=一..6=日) | 6 |
WHERE 條件直接使用 CURDATE() 不會導致索引失效,但避免在欄位上包裹函數 (如 DATE(log_date) = CURDATE()),改用區間比較:
WHERE log_date >= CURDATE() AND log_date < DATE_ADD(CURDATE(), INTERVAL 1 DAY)