我有一个类似的查询,只显示特定日期的数据。但是,如何修改此数据以显示前7天的数据?因此,当我本周运行查询显示日期范围的数据时 2014年1月24日 - 2014年1月30日然后下周显示2014年1月31日 - 2014年6月2日的数据
SELECT * FROM SalesInformation
WHERE (datename(dw, getdate()) = 'Monday' AND CONVERT(VARCHAR(10), DateSold, 101) = DATEADD (Day,DATEDIFF(Day,0,GetDate()),0))
OR (datename(dw, getdate()) = 'Tuesday' AND CONVERT(VARCHAR(10), DateSold, 101) = DATEADD(Day,DATEDIFF(Day,0,GetDate()),0))
OR (datename(dw, getdate()) = 'Wednesday' AND CONVERT(VARCHAR(10), DateSold, 101) = DATEADD(Day,DATEDIFF(Day,0,GetDate()),0))
OR (datename(dw, getdate()) = 'Thursday' AND CONVERT(VARCHAR(10), DateSold, 101) = DATEADD(Day,DATEDIFF(Day,0,GetDate()),0))
OR (datename(dw, getdate()) = 'Friday' AND CONVERT(VARCHAR(10), DateSold, 101) = DATEADD(Day,DATEDIFF(Day,0,GetDate()),0))
答案 0 :(得分:2)
获取最近七天的数据:
WHERE ... AND DATEDIFF(Day,dw,GetDate())<=7
编辑:获取当前周的数据:
AND dw BETWEEN(DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
AND DATEADD(week, DATEDIFF(day, 0, getdate())/7, 6)
更好的表现:
DECLARE @dw1 datetime = DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
select ... WHERE dw >= @dw1
多周:
DECLARE @dw1 datetime = DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
DECLARE @dw2 datetime = DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)-7
select ... WHERE dw >= @dw1 -- current week
union all
select ... WHERE dw >= @dw2 AND dw < @dw1 -- last week
答案 1 :(得分:1)
这将是七天,包括时间。所以01/23/2014 10:06 AM到1/30/2014 10:06 AM。如果您想要01/23的整天,请投降到日期。
这是2012年的一个完整的工作示例。我改为getdate(),以防万一你使用旧版本的引擎。
-- Just playing
use tempdb;
go
-- drop existing
if object_id ('sales') > 0
drop table sales
go
-- create new
create table sales
(
id int identity (1,1) primary key,
sold smalldatetime,
amt smallmoney
);
go
-- clear data
truncate table sales;
go
-- insert data
declare @dte date = '20131231';
declare @amt int;
while (@dte < '20140201')
begin
set @amt = floor(rand(checksum(newid())) * 50000);
set @dte = dateadd(d, 1, @dte);
insert into sales values (@dte, @amt);
end
go
-- Show 7 * 24 hrs worth of data
select *
from sales
where
sold >= dateadd(d, -7, getdate()) and
sold < getdate()
go
查看Aarons博客的日期。它回顾了好的,坏的和丑陋的做法。例如,不要使用BETWEEN。
答案 2 :(得分:0)
这就是我写一个&#34;滚动7天窗口&#34;查询。在这个特定的查询中,我想要一个7天的窗口,从该范围中第一天的凌晨12:00开始,到该范围中最后一天的晚上11:59:59结束。我今天不想要数据。首先计算日期范围,然后在我的查询的where子句中使用。
declare @MinDate datetime,
@MaxDate datetime
select @MinDate = convert(char(10),getdate()-7,120),
@MaxDate = convert(char(10),getdate()-1,120) + ' 23:59:59.997'
select *
from MyTable
where TheDate >= @MinDate
and TheDate <= @MaxDate