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

MySQL 指定日期時間範圍查詢:以 Unix 時間戳儲存與 mktime 運算

     編輯:MySQL 資料庫相關知識

核心概念

資料庫時間欄位儲存 Unix 時間戳 (INT),查詢時用 PHP mktime() 計算目標時間戳,再以數值比對。

常用範圍計算範例

$now = time();

// 一個月前
$lastMonth = mktime(date('H'), date('i'), date('s'), date('m') - 1, date('d'), date('Y'));
$where = " dtime < $lastMonth ";

// 三個月前
$lastThreeMonth = mktime(date('H'), date('i'), date('s'), date('m') - 3, date('d'), date('Y'));
$where = " dtime < $lastThreeMonth ";

// 七天前
$lastWeek = mktime(date('H'), date('i'), date('s'), date('m'), date('d') - 7, date('Y'));

// 一小時前
$lastHour = mktime(date('H') - 1, date('i'), date('s'), date('m'), date('d'), date('Y'));

// 完整 SQL
$sql = "SELECT * FROM testtable WHERE $where";

原理解析

需求mktime 參數調整
N 個月前date('m') - N
N 天前date('d') - N
N 小時前date('H') - N
N 分鐘前date('i') - N
N 秒前date('s') - N

優化建議:改用 DATETIME + 索引

-- 儲存為 DATETIME,建立索引
ALTER TABLE testtable MODIFY dtime DATETIME;
ALTER TABLE testtable ADD INDEX idx_dtime (dtime);

-- 查詢最近 3 個月(可用索引)
SELECT * FROM testtable
WHERE dtime >= DATE_SUB(NOW(), INTERVAL 3 MONTH);
  • DATETIME 可直接使用日期函數運算,語意清晰。
  • 數值比較雖快,但失去日期函數彈性,且難以處理時區。
  • 若必須用 INT 時間戳,可建立 FUNCTION 封裝 FROM_UNIXTIME() 搭配函數索引(MySQL 8.0+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved