資料表含到期欄位 inTime,需在到期前 7 天內自動列出作為重點提醒。
CREATE TABLE t (
id INT,
name VARCHAR(50),
inTime DATETIME
);
INSERT INTO t VALUES
(1,'aa','2007-10-21'), (2,'bb','2007-10-22'), (3,'cc','2007-10-23'),
(4,'dd','2007-10-24'), (5,'ee','2007-10-25'), (6,'ff','2007-10-26'),
(7,'gg','2007-10-27'), (8,'hh','2007-10-28'), (9,'ii','2007-10-29'),
(10,'jj','2007-10-30');
-- 到期前 7 天 (含當天)
SELECT * FROM t
WHERE DATEDIFF(DAY, GETDATE(), inTime) BETWEEN 0 AND 7;
-- 或寫法 2:日期加減運算
SELECT * FROM t
WHERE inTime >= GETDATE() AND inTime < DATEADD(DAY, 8, GETDATE());
GETDATE():取得伺服器目前日期時間。DATEDIFF(DAY, start, end):回傳兩日期相差天數。DATEADD(DAY, n, date):日期加減 n 天。-- C# 範例 (ADO.NET)
string sql = @"
SELECT id, name, inTime
FROM t
WHERE inTime >= @today AND inTime < @limit";
cmd.Parameters.AddWithValue("@today", DateTime.Today);
cmd.Parameters.AddWithValue("@limit", DateTime.Today.AddDays(8));
inTime 建立非叢集索引,查詢可用 Index Seek。DATEDIFF(DAY, GETDATE(), inTime)),改用 inTime >= ... AND inTime < ... 保持 SARGable。搭配 SQL Agent Job 每日執行上述查詢,寄送 Email 或寫入通知表,即可完成自動到期提醒系統。