我需要在日期范围之间的每个星期日。例如,如果我的开始日期是2014年7月27日,结束日期是'08 / 10/2014',那么我需要一张桌子 2014年7月27日, 2014年8月3日, 2014年8月10日
select '2014/7/27'
union all
select dateadd(day, 7,'2014/7/27')
where '2014/7/27' <= '2014/8/10'
只给我07/27/2014和08/03/2014。请帮忙。
答案 0 :(得分:3)
如果您尝试以递归查询方式执行此操作,则格式为
WITH cteSundays as (
select dateadd(day, 0, '2014/7/27') as Sunday
union all
select dateadd(day, 7,Sunday)
FROM cteSundays
where Sunday <= dateadd(day, -7, '2014/8/10')
) SELECT * FROM cteSundays
但请记住,这些受到允许的递归深度的限制。我认为2012年约为100,但您应该尝试确保它能满足您的需求。
编辑:哎呀,原来多了一周,你需要从结束条件中扣除7天答案 1 :(得分:1)
下面的内容将起作用
declare @startdate datetime, @enddate datetime
set @startdate='20140727'
set @enddate='20140810'
select dateadd(week,number,@startdate) from master..spt_values where type='p' and
dateadd(week,number,@startdate) <=@enddate
答案 2 :(得分:0)
一种方法,假设@StartDate是星期日:
DECLARE
@StartDate date = '2014-07-27'
, @EndDate date = '2014-08-10';
WITH
t4 AS (SELECT n FROM (VALUES(0),(0),(0),(0)) t(n))
, t256 AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) - 1 AS n FROM t4 AS a CROSS JOIN t4 AS b CROSS JOIN t4 AS c CROSS JOIN t4 AS d)
SELECT DATEADD(day, n * 7, @StartDate)
FROM t256
WHERE DATEADD(day, n * 7, @StartDate) < = @EndDate;