0

Windowsスケジューラで自動実行するプログラムがあります。プログラムが行うことは、「昨日」の結果のクエリを実行することです...次に、特定の時間範囲に何も含まれていない結果をフィルタリングします。私が今抱えている問題は、クエリで日付を指定する必要があることです...クエリで時刻を自動的に除外するにはどうすればよいですか (午前 5:30 から午前 6:15 の間)

SELECT  Store_Id, DM_Corp_Received_Date
FROM    Register_Till_Count_Tb
WHERE   (DM_Corp_Received_Date >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) 
    AND (Register_Transaction_Type = 'sod') 
    AND (DM_Corp_Received_Date < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) 
    AND (DM_Corp_Received_Date NOT BETWEEN CONVERT(datetime, '2012-08-08 05:30:00', 102) AND CONVERT(Datetime, '2012-08-08 06:15:00', 102))
4

1 に答える 1

1
DECLARE @Yesterday DATETIME = DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0));
DECLARE @Today DATETIME = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0));

SELECT  Store_Id, DM_Corp_Received_Date
FROM    Register_Till_Count_Tb
WHERE   (DM_Corp_Received_Date >= @Yesterday
    AND (Register_Transaction_Type = 'sod') 
    AND (DM_Corp_Received_Date < @Today
    AND (DM_Corp_Received_Date NOT BETWEEN DATEADD(minute, 5*60+30, @Yesterday) AND   
         DATEADD(minute, 6*60+15, @Yesterday))

BETWEEN包括的であるため、境界に注意してください。

于 2012-08-09T17:22:55.733 に答える