我过去只在我的"期间" -column中有这些记录: CW 01,CW 02,...,CW 21
为了仅检索特定范围的日历周,我使用了以下声明:
Select Period,....,
where
(CONVERT(tinyint, SUBSTRING(Period, 4, 2)) >= DATEPART(week, GETDATE()) - 5), ...
现在我必须为月度值添加 MO 05,MO 06 等记录。 显然我现在需要CW和MO值。
所以,而不是Datepart(周,...),我认为我可以使用"月"但我无法找到修改子串stmt的方法,以便从现在开始检索最近6周或2个月。
你知道如何解决这个问题吗?我想要的只是:"显示过去2个月的记录,以及从现在开始的2个月内的CW条目。 我正在使用MSSQL 2012。
更新: fiddle
谢谢。
答案 0 :(得分:2)
试试这个:
<强>查询强>:
with demo_cte as
( select DATEPART(wk,getdate()) CW,DATEPART(MM,getdate()) MO
, GETDATE() cur_date, DATEADD(MM,-2,getdate()) end_date
union all
select DATEPART(wk,cur_date-7) CW,DATEPART(MM,cur_date-7) MO
, cur_date -7 cur_date, end_date
from demo_cte
where cur_date>end_date
)
select * from demo_cte
<强> Results 强>:
| CW | MO | CUR_DATE | END_DATE |
-------------------------------------------------------------------------
| 24 | 6 | June, 13 2013 12:18:43+0000 | April, 13 2013 12:18:43+0000 |
| 23 | 6 | June, 06 2013 12:18:43+0000 | April, 13 2013 12:18:43+0000 |
| 22 | 5 | May, 30 2013 12:18:43+0000 | April, 13 2013 12:18:43+0000 |
| 21 | 5 | May, 23 2013 12:18:43+0000 | April, 13 2013 12:18:43+0000 |
| 20 | 5 | May, 16 2013 12:18:43+0000 | April, 13 2013 12:18:43+0000 |
| 19 | 5 | May, 09 2013 12:18:43+0000 | April, 13 2013 12:18:43+0000 |
| 18 | 5 | May, 02 2013 12:18:43+0000 | April, 13 2013 12:18:43+0000 |
| 17 | 4 | April, 25 2013 12:18:43+0000 | April, 13 2013 12:18:43+0000 |
| 16 | 4 | April, 18 2013 12:18:43+0000 | April, 13 2013 12:18:43+0000 |
| 15 | 4 | April, 11 2013 12:18:43+0000 | April, 13 2013 12:18:43+0000 |
更新:
试试这个:
Select * from test
where period like 'CW%' and
(CONVERT(tinyint, SUBSTRING(Period, 4, 2)) >= DATEPART(week, GETDATE()) - 5)
UNION
Select * from test
where period like 'MO%' and
(CONVERT(tinyint, SUBSTRING(Period, 4, 2)) >= DATEPART(MM, GETDATE()) - 2);
或者
Select * from test
where (period like 'CW%' and
(CONVERT(tinyint, SUBSTRING(Period, 4, 2)) >= DATEPART(week, GETDATE()) - 5))
or
(period like 'MO%' and
(CONVERT(tinyint, SUBSTRING(Period, 4, 2)) >= DATEPART(MM, GETDATE()) - 2));