日期范围
问题描述:
我需要生成无论是在查询中的列或临时表(不知道哪一个是必需的)日期范围
,这样我可以有一个列表中我能在本周结束日期(周六)星期六在特定日期范围内的日期。
此列表将用于加入以将记录与周关联。
我有什么选择?
样品输入:
来源:2013年3月1日
为:2013年4月30日
结果:
周结束 - 2013年3月2日 - 03/09/2013 - 2013年3月16日 - 2013/03/23 - 2013/03/30 - 04/06/2013 - 04/13/2013 - 2013年4月20日 - 2013年4月27日 - 2013年5月4日
当前代码:
create table #TBL7(YEAR INT, WEEKNUMBER INT, STARTDATE DATETIME, ENDDATE DATETIME)
begin
declare @startdate datetime
, @enddate datetime
, @ctr int
SET @startdate = CAST(2013 AS VARCHAR)+ '/01/01'
SET @enddate = CAST(2013 AS VARCHAR) + '/12/31'
SET @ctr = 0
WHILE @enddate >= @startdate
BEGIN
SET @ctr = @ctr + 1
INSERT INTO #TBL7
values(year(@startdate), @ctr, @startdate, @startdate + 6)
SET @startdate = @startdate + 7
END
end
select * from #TBL7
答
这是甲骨文代码。对不起,我不知道如何将其转换为SQL SERVER。不应该很难。您所需要的只是使用适当的函数代替to_date()和to_char(),并计算开始日期和结束日期之间的差异。 (END_DATE-起始日期)+1:
WITH data(r, some_date) AS
(
SELECT 1 r, to_date('03/01/2013', 'MM/DD/YYYY') some_date FROM dual
UNION ALL
SELECT r+1, to_date('03/01/2013', 'MM/DD/YYYY')+r FROM data WHERE r < 61 -- (end_date-start_date)+1
)
SELECT some_date
, To_Char(some_date, 'DY') wk_day
FROM data
WHERE To_Char(some_date, 'DY') = 'SAT'
/
SOME_DATE WK_DAY
--------------------
3/2/2013 SAT
3/9/2013 SAT
3/16/2013 SAT
3/23/2013 SAT
3/30/2013 SAT
4/6/2013 SAT
4/13/2013 SAT
4/20/2013 SAT
4/27/2013 SAT
答
这应该工作:
WITH cteWeeks (WeekEnding) As
(
-- Find the Saturday of the first week.
-- Need to allow for different DATEFIRST settings:
SELECT
CASE
WHEN DatePart(dw, DateAdd(day, @@datefirst, @StartDate)) = 7 THEN @StartDate
ELSE DateAdd(day, 7 - DatePart(dw, DateAdd(day, @@datefirst, @StartDate)), @StartDate)
END
UNION ALL
SELECT
DateAdd(day, 7, WeekEnding)
FROM
cteWeeks
WHERE
WeekEnding < @EndDate
)
SELECT
WeekEnding
FROM
cteWeeks
;
答
首先,创建一个calendar table。那么你有一个非常简单的查询:
select [Date]
from dbo.Calendar
where DayOfWeek = 'Saturday' and [Date] between '20130301' and '20130430'
日历表几乎总是使用日期,因为你与数据,而不是代码工作的最好方式,所以你可以看到它是正确的,有没有神秘代码保持。
可以显示样本数据和所需结果吗?字问题在这里不是很有效。 – 2013-04-05 14:36:28
这有帮助吗? http://stackoverflow.com/questions/15543977/ms-sql-server-2008-getting-start-date-and-end-date-of-the-week-to-next-8-weeks/15546165#15546165 – 2013-04-05 14:43:25
你的编程问题是什么?你需要拿出你的解决方案,如果你坚持一些编程这个网站可以帮助你。 – Mowgli 2013-04-05 15:05:03