Getdate()功能返回选择查询中的部分日期

时间:2016-04-20 12:21:52

标签: sql sql-server

我有一个查询 -

SELECT * FROM TABLE WHERE Date >= DATEADD (day, -7, -getdate()) AND Date <= getdate();

这将返回除第7天之外的每一天的所有记录。如果我在星期日17:00运行此查询,则只会产生返回星期一17:00的结果。我怎么能包括周一08:00的结果。

3 个答案:

答案 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))