选择上周的日期

问题描述 投票:2回答:5

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

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

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

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

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

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

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

sql sql-server sql-server-2008-r2
5个回答
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;

0
投票

试试:

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

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));

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

按照新格式。


-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)
© www.soinside.com 2019 - 2024. All rights reserved.