首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 日期篩選查詢語句大全

     編輯:MySQL 資料庫相關知識

MySQL 日期時間篩選常用語句速查表

整理實戰中高頻的日期範圍查詢寫法,涵蓋當天、昨日、近 N 天、本月、上月、本季、上季、本年、去年、本週、上週等場景。

核心函數速記

  • DATE_FORMAT(col, '%Y-%m'):格式化為年月
  • DATE_SUB(CURDATE(), INTERVAL n DAY):當前日期減 n 天
  • TO_DAYS():日期轉天數,便於減法比較
  • YEAR(), MONTH(), WEEK(), QUARTER():提取對應部分
  • YEARWEEK():年週組合,跨年週查詢必備
  • PERIOD_DIFF():兩個年月期間差

常用範本(假設時間欄位為 create_time)

場景SQL 範例
今天WHERE TO_DAYS(create_time) = TO_DAYS(NOW())
昨天WHERE TO_DAYS(NOW()) - TO_DAYS(create_time) <= 1
近 7 天WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(create_time)
近 30 天WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= DATE(create_time)
本月WHERE DATE_FORMAT(create_time, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m')
上月WHERE PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), DATE_FORMAT(create_time, '%Y%m')) = 1
本季度WHERE QUARTER(create_time) = QUARTER(NOW())
上季度WHERE QUARTER(create_time) = QUARTER(DATE_SUB(NOW(), INTERVAL 1 QUARTER))
本年WHERE YEAR(create_time) = YEAR(NOW())
去年WHERE YEAR(create_time) = YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR))
本週WHERE YEARWEEK(DATE_FORMAT(create_time, '%Y-%m-%d')) = YEARWEEK(NOW())
上週WHERE YEARWEEK(DATE_FORMAT(create_time, '%Y-%m-%d')) = YEARWEEK(NOW()) - 1
近 6 月WHERE create_time BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW()

效能提醒

  • 避免在欄位上使用函數(如 DATE(create_time)),會導致索引失效
  • 優先用 create_time >= '2023-01-01' AND create_time < '2023-02-01' 範圍查詢,利用索引
  • 大表建議按時間分區(Partition)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved