首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL 查詢當前時間前 7 天資料的正確寫法

     編輯:程式設計綜合問答

需求

在 SQL 中篩選出 endtime 落在「當前時間往前 7 天」範圍內的記錄。

常見寫法與陷阱

SQL Server / T-SQL

-- 含邊界:前 7 天包含今天
WHERE endtime >= DATEADD(DAY, -7, GETDATE())

-- 不含今天:嚴格前 7 天
WHERE endtime >= DATEADD(DAY, -7, GETDATE()) AND endtime < CAST(GETDATE() AS DATE)

MySQL

WHERE endtime >= DATE_SUB(NOW(), INTERVAL 7 DAY)

Oracle

WHERE endtime >= SYSDATE - 7

PostgreSQL

WHERE endtime >= NOW() - INTERVAL '7 days'

原問題分析

原寫法 DateDiff(d, (select endtime ...), getdate()) <= 7 存在效能問題(子查詢逐行執行)且邊界語意模糊。建議改為 SARGable 寫法(可用索引):endtime >= DATEADD(DAY, -7, GETDATE())。

最佳實踐

  • 避免在 WHERE 子句中對欄位使用函數,改用常數邊界值。
  • 明確業務需求是否包含「當天」與「邊界時間點」。
  • 大數據量時,確保 endtime 上有索引。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved