选择上周的日期

时间:2016-06-02 14:48:38

标签: sql sql-server sql-server-2008-r2

我正在处理一个脚本,我想要提取前一周的所有记录。 (7天)

我有一个日期列,数据以SQL Date格式存储,如下所示:2016-06-02 00:00:00.000每行前面。

我想选择日期为前7天的所有行,不包括运行查询的日期。

例如,如果此查询在星期一运行,则它将包括上周的星期一 - 星期日,但不包括运行查询的当前星期一。

这是我查询的地方,但它不起作用。

sessionFactory = new Configuration().configure().buildSessionFactory();

F254是包含日期时间的字段。

5 个答案:

答案 0 :(得分:3)

使用dateadd进行日期算术。

编辑正如@MatBailie所指出的,既然你说f254是一个datetime字段,最安全的事情就是使用上一天的上限您想要的范围的结尾,然后在日期范围的那一边使用<而不是<=。这是因为f254列中存储的值可能包含时间组件。即使填充此数据库的软件通常在此字段中存储具有午夜时间戳的值,也不能认为这种情况总是如此。

declare @Today date = getdate();
declare @LowerBound date = dateadd(day, -7, @Today);
declare @UpperBound date = dateadd(day, -1, @Today);

-- If f254 were a 'date' field, this would be appropriate:
select f254, f01 from sal_reg where f254 between @LowerBound and @UpperBound;

-- But if f254 is a datetime, then as @MatBailie points out, this is better:
select f254, f01 from sal_reg where f254 >= @LowerBound and f254 < @Today;

答案 1 :(得分:0)

尝试:

  select f254,
           f01
    from sal_reg
    WHERE  F254 between DATEADD(day, -7, getdate()) and DATEADD(day, -1, getdate());

答案 2 :(得分:0)

尝试:

SELECT f254
    ,f01
FROM sal_reg
WHERE CAST(F254 AS DATE) >= DATEADD(DAY, - 7, CAST(getdate() AS DATE))
    AND CAST(F254 AS DATE) <= DATEADD(DAY, - 1, CAST(getdate() AS DATE));

答案 3 :(得分:0)

SELECT * FROM sal_reg where f245 >= DATE_ADD(current_timestamp, INTERVAL -7 DAY);

按照新格式。

答案 4 :(得分:-2)

select f254,
       f01
from sal_reg
WHERE  F254 between CAST(FLOOR(Cast(getdate() - 7 AS FLOAT)) AS DATETIME) and CAST(FLOOR(CAST(getdate() -1 AS FLOAT)) AS DATETIME)