我的查询遇到了一些问题:
select week_number
,year
from accounting_calender
where week_number<=3
and week_number>3-6
and year=2013在这个查询中,我通过我的报告工具传递了week_number 3和year 2013。
我得到了以下输出:
| Week_number | year |
----------------------
| 3 | 2013 |
| 2 | 2013 |
| 1 | 2013 |但在我的会计日历表中,我也返回了2012年的条目。
所以这里我在减去-6,所以它也必须回到前一年的几周。
我正在寻找类似以下输出的内容:
| Week_number | year |
----------------------
| 51 | 2012 |
| 52 | 2012 |
| 53 | 2012 |
| 3 | 2013 |
| 2 | 2013 |
| 1 | 2013 |我拥有只读访问权限。
发布于 2013-03-02 04:05:28
您需要添加一个特殊情况,其中前6周跨越一年的界限:
select
week_number,
year
from
accounting_calender
where
(week_number > @week-6 and week_number <= @week and year=@year)
or
(week_number > @week-6+53 and year=@year-1)如果为@week >= 6,则第二个条件将始终为> 53,因此它将不起作用。但是,如果为@week < 6,则第二个条件将是前一年的52、51等。
发布于 2013-03-02 04:04:41
将周和年转换为日期将使向日期范围添加内容变得更加容易:
DECLARE @Week_Number INT
DECLARE @Year INT
DECLARE @WeeksToGet INT
SET @Week_Number = 3
SET @Year = 2013
SET @WeeksToGet = 6
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @EndDate = DATEADD(WEEK, @Week_Number, DATEADD(YEAR, @Year - 1900, 0))
SET @StartDate= DATEADD(WEEK, -6, @EndDate)
select
week_number,
year
from accounting_calender
where
DATEADD(WEEK, week_number, DATEADD(YEAR, year - 1900, 0)) between
@StartDate AND @EndDate但是,请注意,这将使您在week_number和year上的任何索引变得模糊。如果这是一个问题,您可以考虑将这些列更改为DATE类型,这样就可以避免将两列转换为一个日期。
Sql Fiddle
https://stackoverflow.com/questions/15165587
复制相似问题