取得當前日期時間
NOW() -- 日期時間 'YYYY-MM-DD HH:MM:SS'
CURDATE() -- 日期 'YYYY-MM-DD'
CURTIME() -- 時間 'HH:MM:SS'
日期部件擷取
| 函數 | 說明 | 範例結果 |
| YEAR(date) | 年份 | 2024 |
| MONTH(date) | 月份 (1-12) | 5 |
| DAY(date) | 日期 (1-31) | 15 |
| HOUR(time) | 小時 (0-23) | 14 |
| MINUTE(time) | 分鐘 (0-59) | 30 |
| SECOND(time) | 秒 (0-59) | 45 |
| DAYOFWEEK(date) | 星期索引 (1=Sun, 7=Sat) | 4 |
| WEEKDAY(date) | 星期索引 (0=Mon, 6=Sun) | 2 |
| DAYOFYEAR(date) | 年間第幾天 (1-366) | 135 |
| QUARTER(date) | 季度 (1-4) | 2 |
| WEEK(date[, mode]) | 年間第幾週,mode 控制週起始日 | 19 |
| DAYNAME(date) | 星期英文名 | Wednesday |
| MONTHNAME(date) | 月份英文名 | May |
日期計算與格式化
-- 日期加減
DATE_ADD(date, INTERVAL expr unit)
DATE_SUB(date, INTERVAL expr unit)
-- 範例:30 天前
SELECT * FROM orders WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY);
-- 日期差 (天數)
DATEDIFF(date1, date2)
-- 格式化輸出
DATE_FORMAT(date, format)
-- 範例:'2024-05-15 14:30:45'
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
常用格式符號
%Y 四位數年份 %m 兩位數月份 %d 兩位數日期
%H 24小時制 %i 分鐘 %s 秒
%W 星期全名 %M 月份全名
實戰:查詢最近 30 天資料
SELECT * FROM logs
WHERE log_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);
-- 或
WHERE TO_DAYS(NOW()) - TO_DAYS(log_date) <= 30;