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技能......请帮助......!
答案 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')
这个想法是从今天(或昨天)开始计算年,月和日,并通过连接它们来形成新的日期。
请注意日期格式的文化设置,并在将此代码投入生产之前进行一些测试。