T-SQL:从上周五下午12:30到周一上午330点选择日期范围

时间:2016-06-17 16:39:29

标签: sql-server date reporting-services time

我在SQL Server 2008中创建一个查询,用于每周一上午03:30运行的SSRS报告,检索周末销售详情。

报告准备就绪,但我不得不对日期范围进行硬编码,因为我在WHERE语句中无法表达该条件。

我需要在周五下午12:30到周一上午330点之间检索基于[salestime]列(类型datetime)的数据。

非常感谢您对此的帮助。

2 个答案:

答案 0 :(得分:1)

如下:

WHERE SalesTime BETWEEN DATEADD(HH,-63,GETDATE()) AND GETDATE()

我相信时间值相隔63小时。这是因为您的报告会在凌晨3:30自动运行,这就是您帖子中的声音。

答案 1 :(得分:0)

如果您想在本周的任何时间运行报告以报告上周末的销售情况

SET DATEFIRST 7

DECLARE @ThisMonday     date        = DATEADD(DAY, 2 - DATEPART(WEEKDAY, GETDATE()), GETDATE())
DECLARE @LastFriday     date        = DATEADD(DAY, -3, @ThisMonday)

DECLARE @StartTime      datetime    = CAST(@LastFriday AS datetime) + CAST('12:30' AS datetime)
DECLARE @EndTime        datetime    = CAST(@ThisMonday AS datetime) + CAST('03:30' AS datetime)

SELECT  @ThisMonday, @LastFriday, @StartTime, @EndTime

现在,您可以使用salestime BETWEEN @StartTime AND @EndTime过滤报告。