函數速查
| 函數 | 返回值 | 範例(假設今天 2013-06-24) |
YEAR(date) | 年份(4 位數) | YEAR(CURDATE()) → 2013 |
MONTH(date) | 月份(1-12) | MONTH(CURDATE()) → 6 |
DAYOFMONTH(date) | 日期(1-31) | DAYOFMONTH(CURDATE()) → 24 |
DAY(date) | 同 DAYOFMONTH | DAY(CURDATE()) → 24 |
DAYOFWEEK(date) | 星期(1=星期日) | DAYOFWEEK(CURDATE()) → 2 |
DAYOFYEAR(date) | 年內第幾天 | DAYOFYEAR(CURDATE()) → 175 |
常用組合場景
-- 按年月分組統計
SELECT YEAR(created_at) AS yr, MONTH(created_at) AS mo, COUNT(*)
FROM orders
GROUP BY yr, mo
ORDER BY yr, mo;
-- 取本月第一天/最後一天
SELECT DATE_FORMAT(CURDATE(), '%Y-%m-01') AS first_day;
SELECT LAST_DAY(CURDATE()) AS last_day;
-- 生日查詢:本月過壽的用戶
SELECT * FROM users WHERE MONTH(birthday) = MONTH(CURDATE());
注意事項
- 參數可為
DATE、DATETIME、TIMESTAMP、字符串日期。
- 若列為
NULL,返回 NULL。
- 大量數據按函數列查詢會導致索引失效,建議冗余存儲年/月列或使用生成列(MySQL 5.7+)。