查找周开始日期和结束日期

时间:2015-05-11 06:21:57

标签: sql sql-server sql-server-2008 reporting-services ssrs-2008-r2

我有周数和年份,我需要在我的ssrs报告的行中显示“mm / dd / yy总计为mm / dd / yy。我的周从星期一开始。例如,如果我的周数是'2'和年份是'2010'然后我必须在我的ssrs专栏中显示“2010年4月1日至2010年10月1日的总数”。怎么做?

5 个答案:

答案 0 :(得分:0)

SQL Server有一个DATEPART函数,用于计算一年的序数周数。但是,您必须在此之前调用DATEFIRST来定义一周中的哪一天代表一周的开始。在你的情况下,你已经声明你的一周的开始是星期一(即1)。

repNumObject    = document.querySelector("input[type='radio']:checked");

答案 1 :(得分:0)

试试这个

declare @year char(4) = '2010'
declare @week int = 2
declare @fromdate datetime
declare @todate datetime
set @fromdate = DATEADD(wk, DATEDIFF(wk, 6, '1/1/' + @year) + (@week-1), 7);
set @todate = DATEADD(wk, DATEDIFF(wk, 5, '1/1/' + @year) + (@week-1), 6) ;
;WITH dates AS 
(
    SELECT CONVERT(datetime,@fromDate) as Date
    UNION ALL
    SELECT DATEADD(d,1,[Date])
    FROM dates 
    WHERE DATE < @toDate
)
select * from dates

答案 2 :(得分:0)

您的描述不是美国标准,也不是isoweek。似乎是这些的混合。我从来没有听说过这是一个标准。这几乎是isoweek。这就是答案的基础。

计算iso年份有点棘手,你可以阅读here

这是您需要的语法:

DECLARE @year int = 2010
DECLARE @week int = 2
;WITH CTE AS
(
  SELECT 
      dateadd(wk,  datediff(wk, - @week * 7, 
        cast(cast(@year as char(4)) as datetime) - 5), 0) startofweek
)
SELECT 
  replace('total for ' + convert(char(10), startofweek, 110)
  + ' to ' + convert(char(10), dateadd(day, 6, startofweek) , 110), '-', '/')
FROM CTE

结果:

total for 01/11/2010 to 01/17/2010

2010年Isoweek 2是2010-01-11

答案 3 :(得分:0)

尝试设置DATEFIRST(https://msdn.microsoft.com/en-ie/library/ms181598.aspx

SET DATEFIRST 7

declare @wk int  
declare @yr int
declare @EndOfWeek as datetime

set @wk = 2
set @yr = 2010


SET @EndOfWeek = dateadd (week, @wk, dateadd (year, @yr-1900, 0)) + 1 - datepart(dw, dateadd (week, @wk, dateadd (year, @yr-1900, 0)) )

SELECT 
    replace('total for ' + convert(char(10), dateadd(day, -6, @EndOfWeek) , 110)
  + ' to ' + convert(char(10), @EndOfWeek, 110), '-', '/')

结果:

total for 01/04/2010 to 01/10/2010

答案 4 :(得分:-1)

我希望它有所帮助:

declare @year char(4) = '2014'
declare @week int = 2
select dateadd(week,@week,convert(date,@year+'-01-01',121))

从此list

更改适合您的日期格式