首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 時間範圍查詢全攻略:當天、本周、本月、相對時間的多種 SQL 寫法

     編輯:MySQL 綜合教學

測試環境準備

CREATE TABLE IF NOT EXISTS t (
  id INT,
  addTime DATETIME DEFAULT '0000-00-00 00:00:00'
);
INSERT INTO t VALUES (1, '2012-07-12 21:00:00'), (2, '2012-07-22 21:00:00');

一、當天數據查詢

方法SQL推薦度
日期格式化對比WHERE DATE_FORMAT(addTime,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')⭐
簡寫範圍查詢WHERE addTime >= DATE_FORMAT(NOW(),'%Y-%m-%d')⭐⭐
DATEDIFF 函數WHERE DATEDIFF(addTime, NOW()) = 0⭐⭐⭐ 推薦
時間戳範圍WHERE addTime BETWEEN UNIX_TIMESTAMP(NOW()-86400) AND NOW()⭐

時間函數差異:NOW() 含時分秒;CURDATE()/CURRENT_DATE() 僅日期。

二、本月數據查詢

  1. 今天是本月第幾天:SELECT DAYOFMONTH(NOW())
  2. 本月第一天:SELECT DATE_SUB(NOW(), INTERVAL DAYOFMONTH(NOW())-1 DAY)
  3. 上月第一天:SELECT DATE_SUB(DATE_SUB(NOW(), INTERVAL DAYOFMONTH(NOW())-1 DAY), INTERVAL 1 MONTH)

日期運算核心:DATE_ADD(date, INTERVAL expr type) / DATE_SUB(...)

  • expr:間隔數值,負值加減號
  • type:YEAR/MONTH/DAY/WEEK 等

INTERVAL 關鍵字雙重含義:

  • 函數:INTERVAL(10,1,3,5,7) 返回 4(比較小於 10 的個數)
  • 關鍵字:INTERVAL 1 DAY 設置間隔

三、本周數據查詢

  1. 今天是周幾:SELECT WEEKDAY(NOW())(0=周一,6=周日)
  2. 本周第一天:SELECT DATE_SUB(NOW(), INTERVAL WEEKDAY(NOW()) DAY)
  3. 上周第一天至今:WHERE addTime >= DATE_FORMAT(DATE_SUB(DATE_SUB(NOW(), INTERVAL WEEKDAY(NOW()) DAY), INTERVAL 1 WEEK), '%Y-%m-%d')

⚠️ 若存儲為時間戳,先用 FROM_UNIXTIME() 轉換。

四、日期與時間戳互轉

  • 時間戳 → 日期:SELECT FROM_UNIXTIME(1336542121)
  • 日期 → 時間戳:SELECT UNIX_TIMESTAMP('2013-04-08')

五、相對時間快捷查詢(昨天、一周前、一月前、一年前)

-- 日期類型字段
WHERE inputtime > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
WHERE inputtime > DATE_SUB(CURDATE(), INTERVAL 1 WEEK)
WHERE inputtime > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
WHERE inputtime > DATE_SUB(CURDATE(), INTERVAL 1 YEAR)

-- 時間戳類型字段(需統一格式)
WHERE inputtime > UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY))
WHERE inputtime > UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))
WHERE inputtime > UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
WHERE inputtime > UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 YEAR))

核心函數速查

  • DATE_SUB/DATE_ADD:日期加減
  • UNIX_TIMESTAMP:日期轉時間戳
  • FROM_UNIXTIME:時間戳轉日期
  • DATEDIFF:日期差值(天)
  • DAYOFMONTH/WEEKDAY:日期屬性提取
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved