我有一个SSRS报告(2008R2 3.0),该报告在工作周中使用参数过滤器,格式为YYYYWW。在2018年,基于ISO标准(source)有52个工作周。
对于默认参数值,我使用以下公式选择最后一个WW:
DATEPART(DateInterval.Year, DATEADD("d", -7, now())) & FORMAT(DATEPART(DateInterval.WeekOfYear, DATEADD("d", -7, now())), "00")
由于某种奇怪的原因,它返回了201853
。据我了解,应该给出201852
的运行日期为20180106
。
我知道在T-SQL中可以使用ISO_WEEK
定义返回类型,但是SSRS中的DateInterval是否等效?
为了简化:
DATEPART(DateInterval.WeekOfYear, DATEADD("d",-7,now()))
从201801-201807运行时返回53,而不是52。
关于为什么返回错误的WeekOfYear值的任何想法?
答案 0 :(得分:1)
我认为这可能是由于服务器上您的区域一周的第一天设置所致。
如果一周的第一天是星期六,那么2018年有53周。您可以在SQL Server中使用DATEFIRST设置来设置一周的第一天。
使用SELECT @@DATEFIRST
确定服务器设置。
此示例代码将显示差异。
SET DATEFIRST 7
SELECT @@DATEFIRST
SELECT DATEPART(WEEK, '2018-12-30')
SET DATEFIRST 1
SELECT @@DATEFIRST
SELECT DATEPART(WEEK, '2018-12-30')
对于您的查询,您可能需要使用SET DATEFIRST 1
将一周的第一天设置为星期日。