我正在编写一个脚本,我想要提取前一周的所有记录。 (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是包含日期时间的字段。
使用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;
试试:
select f254,
f01
from sal_reg
WHERE F254 between DATEADD(day, -7, getdate()) and DATEADD(day, -1, getdate());
尝试:
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));
SELECT * FROM sal_reg where f245 >= DATE_ADD(current_timestamp, INTERVAL -7 DAY);
按照新格式。
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)