查詢指定日期範圍內的數據,最直觀的寫法是使用 WHERE 條件組合:
SELECT * FROM `cangku`
WHERE `shijian` >= '2011-01-13' AND `shijian` <= '2011-01-20';
更簡潔的方式是使用 BETWEEN ... AND ...(包含邊界值):
SELECT * FROM `cangku`
WHERE `shijian` BETWEEN '2011-01-13' AND '2011-01-20';
利用 MONTH() 函數提取月份並與當前月份比較:
SELECT * FROM `tables`
WHERE MONTH(`Date`) = MONTH(NOW());
性能提示: 對日期列使用函數(如 MONTH(date))會導致索引失效,大表查詢建議改用範圍條件:
SELECT * FROM `tables`
WHERE `Date` >= DATE_FORMAT(NOW(), '%Y-%m-01')
AND `Date` < DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH);
| 需求 | 範例 |
|---|---|
| 本週數據 | WHERE YEARWEEK(`date`) = YEARWEEK(NOW()) |
| 本季度數據 | WHERE QUARTER(`date`) = QUARTER(NOW()) AND YEAR(`date`) = YEAR(NOW()) |
| 過去 30 天 | WHERE `date` >= DATE_SUB(NOW(), INTERVAL 30 DAY) |
WHERE 中對索引列使用函數、運算或隱式轉換。