SQL查询,用于选择从昨天的特定日期/时间到特定日期/时间当前日期的范围

时间:2015-10-09 16:24:52

标签: sql sybase dateadd getdate datepart

SELECT * 
FROM services 
WHERE service_date BETWEEN (dateadd(DD, -1, getdate())) AND (dateadd(DD, 1, getdate())) **---Gives us a last one day data.**

但我们真正需要的是从07:00 AM昨天到06:59 AM当天的数据,所以我尝试了以下内容:

SELECT * 
FROM services 
WHERE service_date BETWEEN (dateadd(DD, -1,((DatePart(hh, getdate())) >= 7 ))) **-- Expecting to pull from yesterday 07:00** 
                   AND (dateadd(DD, -1,((DatePart(hh, getdate())) <= 6 ))) **-- to current day till 06:59**

但系统不喜欢我的SQL技能......请帮助......!

2 个答案:

答案 0 :(得分:1)

这些将为您提供您正在寻找的日期......

Select DATEADD(HOUR,-17, (DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)))


Select DATEADD(HOUR,7, (DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)))

我不确定这是否是最有效的方法,但它有效。

答案 1 :(得分:0)

更新:我同意Andy的解决方案。类似的方法,但他的解决方案更加优雅和高效。

尝试类似的东西:

SELECT * 
FROM services 
WHERE service_date
      BETWEEN Convert(DateTime, Convert(nchar(4), DatePart(YYYY, GETDATE())) + '-' 
+ Convert(nchar(2), DATEPART(MM, GETDATE())) + '-' 
+ Convert(nchar(2), DATEPART(DD, Getdate())-1) + ' 7:00:00')
      AND Convert(DateTime, Convert(nchar(4), DatePart(YYYY, GETDATE())) + '-' 
+ Convert(nchar(2), DATEPART(MM, GETDATE())) + '-' 
+ Convert(nchar(2), DATEPART(DD, Getdate())) + ' 6:59:00')

这个想法是从今天(或昨天)开始计算年,月和日,并通过连接它们来形成新的日期。

请注意日期格式的文化设置,并在将此代码投入生产之前进行一些测试。