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

SQL Server 日期函數應用:查詢整數天/月週期資料

     編輯:MySQL 資料庫相關知識

常用日期運算函數

函數用途範例
DATEADD(interval, number, date)日期加減DATEADD(month, 2, GETDATE()) 兩個月後
DATEDIFF(interval, startdate, enddate)日期差值DATEDIFF(day, time_col, GETDATE()) 相差天數

查詢整數週期資料範例

1. 查詢「剛好」整月/整天的資料

-- 整月週期(如每月 1 號產生的資料)
SELECT * FROM tb
WHERE DATEDIFF(month, time_col, GETDATE()) = 0
  AND DAY(time_col) = DAY(GETDATE());

-- 整天週期(同一天不同時刻)
SELECT * FROM tb
WHERE DATEDIFF(day, time_col, GETDATE()) = 0;

2. 精確到小時/分鐘

-- 整小時
SELECT * FROM tb
WHERE DATEDIFF(hour, time_col, GETDATE()) = 0;

-- 整分鐘
SELECT * FROM tb
WHERE DATEDIFF(minute, time_col, GETDATE()) = 0;

3. 使用 DATEADD 反向比對(效能較佳,可用索引)

-- 兩個月前的同一天同時刻
SELECT * FROM tb
WHERE time_col = DATEADD(month, -2, GETDATE());

-- 七天前
SELECT * FROM tb
WHERE time_col = DATEADD(day, -7, GETDATE());

4. 儲存程序檢測是否為整數週期

DECLARE @num INT = 2;
IF DATEADD(day, @num, '2010-01-05 01:00') = GETDATE()
   OR DATEADD(month, 2, '2010-01-05 01:00') = GETDATE()
    PRINT '是整數週期'
ELSE
    PRINT '非整數週期'

效能建議

  • 避免在 WHERE 欄位上使用函數(如 DATEDIFF(day, col, GETDATE()) = 0),會導致索引失效。
  • 改用 範圍查詢:col >= DATEADD(day, -1, CAST(GETDATE() AS DATE)) AND col < CAST(GETDATE() AS DATE)
  • 若頻繁查詢特定週期,考慮建立 計算欄位 或 索引檢視表。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved