我有一個程序可以自動運行Windows調度程序。該程序運行一個使用Yesterdays日期的存儲過程,對我們的數據庫運行查詢以從前一天中提取結果。此查詢排除整個一天的特定時間段,因爲我們不關心這些結果。但是,我們在星期天有不同的時間,並且想要更改星期天的查詢......如果是「星期天」,有什麼不同的查詢方法嗎?下面是我的存儲過程:如何根據星期幾運行不同查詢
CREATE PROCEDURE [dbo].[sp_Open_Close_Report_1] AS
declare @dtNow datetime , @dtToday datetime , @dtFrom datetime , @dtThru datetime , @dtExcludeFrom datetime , @dtExcludeThru datetime, @dtExcludeEOD datetime
set @dtNow = getdate()
set @dtToday = convert(datetime,convert(varchar,@dtNow,112),112)
set @dtFrom = dateadd(day,-1,@dtToday) -- start-of-day yesterday
set @dtThru = dateadd(ms,-3,@dtToday) -- end-of-day yesterday (e.g., 2012-06-17 23:59:59.997)
set @dtExcludeFrom = convert(datetime, convert(char(10),@dtFrom,120) + ' 05:30:00.000' , 120)
set @dtExcludeThru = convert(datetime, convert(char(10),@dtFrom,120) + ' 06:15:00.000' , 120)
set @dtExcludeEOD = convert(datetime, convert(char(10),@dtFrom,120) + ' 08:00:00.000' , 120)
SELECT Store_Id , DM_Corp_Received_Date, Register_Transaction_Type
FROM Register_Till_Count_Tb
WHERE (Register_Transaction_Type = 'SOD' and store_ID = '12345'
AND DM_Corp_Received_date between @dtFrom
and @dtThru
AND DM_Corp_Received_date not between @dtExcludeFrom
and @dtExcludeThru) or (Register_Transaction_Type = 'EOD' and Store_ID='12345'
AND DM_Corp_Received_date Between @dtFrom and @dtThru)
上週日的@DTExclude
從將是6:30和@dtexcludeThru
將是7:15
您是否考慮過使用SQL Server代理?它可能會爲您提供更多的粒度和控制。 – 2012-08-10 13:28:46
你有很多不必要的日期 - >字符串 - >日期轉換。如果你需要捕獲整整一天,那麼通常使用* exclusive *結束日期並避免使用'BETWEEN',這樣做也可以避免將來的問題,如果你移動到'datetime2',那麼毫秒級的精度就會更高。 – 2012-08-10 13:29:27
我不能,它是SQL Server 2000,並且在2000年通過服務器代理髮送電子郵件的方法並不簡單 – Shmewnix 2012-08-10 13:30:24