我正在尝试根据周三至周三的报告周生成一份报告。 我发现很多例子都说明了获取正确的日期,例如:
DATEADD(DAY, -5, DATEADD(WEEK, DATEDIFF(WEEK, 0, getdate()), 0))
问题是这些似乎只适用于当前周。上面的示例给出了 15/11/17,这对于今天 (24/11/2017) 是正确的,但在周日 (26/11/2017) 是不正确的,此时会得到 22/11/2017。
如果我在2017年11月22日至28日(周三至周二)期间查看报告,我应该会看到2017年11月15日至22日期间的报告
在2011年11月29日和2017年12月5日之间,报告应为2017年11月22日至29日
感谢任何帮助!
最佳答案
试试这个方法
SELECT
*,
CASE WHEN [wensday]>reportDate THEN DATEADD(WEEK,-2,[wensday]) ELSE DATEADD(WEEK,-1,[wensday]) END [from date],
CASE WHEN [wensday]>reportDate THEN DATEADD(WEEK,-1,[wensday]) ELSE [wensday] END [to date]
FROM
(
SELECT
reportDate,
-- monday of this week
--DATEADD(DAY,DATEDIFF(DAY,0,reportDate)/7*7,0) [monday],
-- wensday of this week
DATEADD(DAY,2,DATEADD(DAY,DATEDIFF(DAY,0,reportDate)/7*7,0)) [wensday]
FROM
(
SELECT CAST('20171115' AS date) reportDate
UNION ALL
SELECT CAST('20171121' AS date) reportDate
UNION ALL
SELECT CAST('20171122' AS date) reportDate
UNION ALL
SELECT CAST('20171123' AS date) reportDate
UNION ALL
SELECT CAST('20171124' AS date) reportDate
UNION ALL
SELECT CAST('20171129' AS date) reportDate
UNION ALL
SELECT CAST('20171205' AS date) reportDate
) test
) q
内联算法
DECLARE @reportDate date=GETDATE()
DECLARE @Wensday date=DATEADD(DAY,2,DATEADD(DAY,DATEDIFF(DAY,0,@reportDate)/7*7,0))
DECLARE @FromDate date=CASE WHEN @Wensday>@reportDate THEN DATEADD(WEEK,-2,@Wensday) ELSE DATEADD(WEEK,-1,@Wensday) END
DECLARE @ToDate date=DATEADD(WEEK,1,@FromDate)
SELECT @reportDate,@Wensday,@FromDate,@ToDate
关于sql - 周三至周三报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47466213/