我有一个查询 -
SELECT * FROM TABLE WHERE Date >= DATEADD (day, -7, -getdate()) AND Date <= getdate();
这将返回除第7天之外的每一天的所有记录。如果我在星期日17:00运行此查询,则只会产生返回星期一17:00的结果。我怎么能包括周一08:00的结果。
答案 0 :(得分:3)
试试这样:
SELECT *
FROM SomeWhere
WHERE [Date] > DATEADD(HOUR,8,DATEADD(DAY, -7, CAST(CAST(GETDATE() AS DATE) AS DATETIME))) --7 days back, 8 o'clock
AND [Date] <= GETDATE(); --now
答案 1 :(得分:1)
那是因为你正在比较日期和时间,而不仅仅是日期。
如果您想要包含所有日期,可以截断getdate()
的时间部分:您可以通过转换为日期来实现这一目标:
SELECT * FROM TABLE
WHERE Date >= DATEADD (day, -7, -convert(date, getdate())
AND Date <= convert(date, getdate());
如果您想从早上8点开始,最好再添加8小时来完成更新。
declare @t datetime = dateadd(HH, 8, convert(datetime, convert(date, getdate())))
SELECT * FROM TABLE
WHERE Date >= DATEADD (day, -7, -@t) AND Date <= @t;
注意:转化convert(date, getdate())
您获得的数据类型日期,您无法直接向其添加小时数;您必须将其重新转换为日期时间。
答案 2 :(得分:0)
听起来你想要删除时间。正确?如果是,请执行以下操作。
SELECT * FROM TABLE WHERE Date >= (DATEADD (day, -7, -getdate()) AND Date DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0))