Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找周开始和周结束日期_Sql_Sql Server_Sql Server 2008_Reporting Services_Ssrs 2008 R2 - Fatal编程技术网

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

Sql 查找周开始和周结束日期,sql,sql-server,sql-server-2008,reporting-services,ssrs-2008-r2,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日的总计。如何做到这一点?我希望这有助于: declare @year char(4) = '2014' declare @week int = 2 select dateadd(week,@week,convert(date,@year+'-01-01',121)

我有周数和年数,我需要在我的ssrs报告的一行中显示mm/dd/yy到mm/dd/yy的总计。我的一周从星期一开始。例如,如果我的周数为“2”,年份为“2010”,那么我必须在我的ssrs列中显示2010年4月1日至2010年10月1日的总计。如何做到这一点?

我希望这有助于:

declare @year char(4) = '2014'
declare @week int = 2
select dateadd(week,@week,convert(date,@year+'-01-01',121))
从此更改适合您的日期格式。SQL Server具有计算一年中第几周的函数。但是,您必须在此之前调用以定义一周中的哪一天代表一周的开始。在您的情况下,您已声明本周的开始时间为周一,即1

SET DATEFIRST 1;

SELECT SUM([your data column])
FROM [your table]
WHERE DATEPART(WEEKNUM, [your date column])=[your week parameter]
AND DATEPART(YEAR, [your date column])=[your year parameter]
试试这个

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

你的描述既不符合美国标准也不符合国际标准。似乎是这些的混合体。我从没听说过这是一个标准。快一周了。这就是这个答案的基础

计算iso年有点棘手,您可以阅读以下内容:

这是您需要的语法:

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年国际标准化组织第二周是2010年1月11日,请尝试先设置日期

结果是:

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

“1”周的日期范围是多少?我更喜欢这样的任务的日历表:从2009年12月28日到2003年1月1日/2010@AliasVarghese不正确,iso_第1周是2010-01-04至2010-01-10这与iso第1周的定义不同,2010年1月4日是iso第1周:-再次测试您的答案,它不会返回正确的结果请!a这个答案是不对的,b而且很糟糕!宣布@year char4`==>来吧,这是有史以来最糟糕的风格!我不明白你为什么会被否决,我把你投了赞成票。你用datefirst太棒了!好极了!,而不是其他人写的那些蹩脚的黑客。只有他想看到这周的开始和结束。这个不见了,但不多。干杯,我也不明白!:
total for 01/04/2010 to 01/10/2010