SQL Agent 作業需每半小時跑一次報表,動態計算「上一個半小時區間」的起迄時間(如 10:00-10:30、10:30-11:00),作為預存程序參數。
DECLARE @BeginTime DATETIME, @EndTime DATETIME;
DECLARE @Hour INT, @Min INT;
SET @Min = DATEPART(MINUTE, GETDATE());
IF @Min < 30
BEGIN
-- 目前在 :00~:30 區間,取上一個 :30~:00
SET @BeginTime = DATEADD(HOUR, -1, CONVERT(VARCHAR(10), GETDATE(), 120) + ' ' + CAST(DATEPART(HOUR, GETDATE()) AS VARCHAR) + ':30');
SET @EndTime = CONVERT(VARCHAR(10), GETDATE(), 120) + ' ' + CAST(DATEPART(HOUR, GETDATE()) AS VARCHAR) + ':00';
END
ELSE
BEGIN
-- 目前在 :30~:00 區間,取本小時 :00~:30
SET @BeginTime = CONVERT(VARCHAR(10), GETDATE(), 120) + ' ' + CAST(DATEPART(HOUR, GETDATE()) AS VARCHAR) + ':00';
SET @EndTime = CONVERT(VARCHAR(10), GETDATE(), 120) + ' ' + CAST(DATEPART(HOUR, GETDATE()) AS VARCHAR) + ':30';
END
EXEC up_GenReport @BeginTime, @EndTime;
| 當前時間 | @Min | 計算區間 | @BeginTime | @EndTime |
|---|---|---|---|---|
| 10:15 | 15 (<30) | 上一個半小時 | 09:30 | 10:00 |
| 10:45 | 45 (>=30) | 本小時前半段 | 10:00 | 10:30 |