Shm*_*nix 4 sql sql-server sql-server-2008
我有一个简单的查询,可以为我们的一天提供支付报告.我想自动发送这个每晚发送,但我希望报告每天上午12:00 AM - 晚上11:59运行...我将在晚上9:00发送报告,所以我想它如果这更容易,只需要到晚上9点才能到达.
这是我的查询:
SELECT COUNT(*) AS Number, SUM(dblPayoutAmt) AS Amount
FROM Payouts
WHERE (dtCreated BETWEEN @startdate AND @enddate)
Run Code Online (Sandbox Code Playgroud)
不要使用BETWEEN,使用> =开始日期和<结束日期之后的一天:
WHERE (dtCreated >= @startdate AND dtCreated < DATEADD(day, 1, @enddate))
Run Code Online (Sandbox Code Playgroud)
原因是BETWEEN会在结束日期的凌晨12:00之前找到,但不会过去.
更新
对于今天的日期,您可以这样做:
WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, dtCreated)) = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
Run Code Online (Sandbox Code Playgroud)
这将检查它dtCreated今天是否等于某一点.
更新
正如@ScottChapman指出的那样,你可以在没有转换体操的情况下通过DATE直接转换为类型来做同样的事情.但是,此类型仅在MSSQL 2008及更高版本中可用.