萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 日期範圍查詢實戰:BETWEEN、月份過濾與性能優化

基本日期區間查詢

查詢指定日期範圍內的數據,最直觀的寫法是使用 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 中對索引列使用函數、運算或隱式轉換。
  • 大範圍查詢考慮分區表(按月/日分區)。
copyright © 萬盛學電腦網 all rights reserved