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

MySQL 字串日期加 10 分鐘並與當前時間比較的實作技巧

     編輯:MySQL 綜合教學

業務場景

資料表中 create_date 以字串格式(如 '2014-06-18 10:20:29')儲存,需找出「建立時間 + 10 分鐘 ≥ 指定時間」的記錄。

核心 SQL

SELECT id 
FROM tran 
WHERE state = 'F' 
  AND TIMESTAMPDIFF(SECOND, 
       DATE_ADD(create_date, INTERVAL 10 MINUTE), 
       '2014-06-18 10:30:29') > 0;

函數解析

函數作用
DATE_ADD(date, INTERVAL expr unit)日期加減運算,支援 MINUTE、HOUR、DAY 等單位
TIMESTAMPDIFF(unit, datetime1, datetime2)回傳 datetime2 - datetime1 的差值(指定單位)

邏輯拆解

  1. DATE_ADD(create_date, INTERVAL 10 MINUTE):計算「建立時間 + 10 分鐘」
  2. TIMESTAMPDIFF(SECOND, ..., '2014-06-18 10:30:29'):以秒為單位計算「目標時間 - 計算後時間」
  3. > 0:表示目標時間晚於「建立時間 + 10 分鐘」,即尚未超過 10 分鐘閾值

等效寫法(更直觀)

-- 寫法 1:直接比較日期時間
WHERE DATE_ADD(create_date, INTERVAL 10 MINUTE) <= '2014-06-18 10:30:29'

-- 寫法 2:使用 DATE_SUB 反向思考
WHERE create_date <= DATE_SUB('2014-06-18 10:30:29', INTERVAL 10 MINUTE)

效能建議

  • 若 create_date 有索引,寫法 2 可用上索引(create_date 孤立在左側)
  • 字串日期隱含轉換開銷,建議欄位型別改為 DATETIME 或 TIMESTAMP
  • 避免在 WHERE 條件中對欄位做運算(如 YEAR(date) = 2014),導致全表掃描

常見陷阱

錯誤寫法問題修正
DATE_ADD(create_date, INTERVAL 10 DAY_MINUTE)單位關鍵字錯誤INTERVAL 10 MINUTE
TIMESTAMPDIFF(MINUTE, ...) > 10單位不匹配邏輯統一用 SECOND 或調整比較值
字串直接比較格式不固定會錯先轉型或用 STR_TO_DATE
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved