我正在处理一个脚本,我想要提取前一周的所有记录。 (7天)
我有一个日期列,数据以SQL Date格式存储,如下所示:2016-06-02 00:00:00.000每行前面。
我想选择日期为前7天的所有行,不包括运行查询的日期。
例如,如果此查询在星期一运行,则它将包括上周的星期一 - 星期日,但不包括运行查询的当前星期一。
这是我查询的地方,但它不起作用。
sessionFactory = new Configuration().configure().buildSessionFactory();
F254是包含日期时间的字段。
答案 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)