根据锚定日期确定特定的两周

时间:2016-04-04 02:48:39

标签: sql sql-server sql-server-2008

我有2个双周周期,由2个开始日期间隔1周定义。例如,第1组在2016-01-15开始,第2组在2016-01-22开始。

每两周一次,我指的是一个持续2周的滚动期。

如何确定当前日期是第1组第1周还是第2组第1周?

举例来说,今天的日期是2016-04-04所以这将是第1组的第1天和第1组的第8天,因此我想查询返回'组2'

1 个答案:

答案 0 :(得分:0)

DATEDIFF计算两个日期之间的差异。除以14天,取余数(%)。

如果余数小于7,则更接近该开始日期。

由于您知道您的开始日期相隔1周,因此您只需要检查一个开始日期。

DECLARE @VarStartGroup1 date = '2016-01-15';
DECLARE @VarStartGroup2 date = '2016-01-22';
DECLARE @VarCurrentDate date = '2016-04-04';

SELECT
    DATEDIFF(day, @VarStartGroup1, @VarCurrentDate) AS TotalDays1,
    DATEDIFF(day, @VarStartGroup2, @VarCurrentDate) AS TotalDays2,
    DATEDIFF(day, @VarStartGroup1, @VarCurrentDate) % 14 AS DayNumberInGroup1,
    DATEDIFF(day, @VarStartGroup2, @VarCurrentDate) % 14 AS DayNumberInGroup2,
    CASE WHEN DATEDIFF(day, @VarStartGroup1, @VarCurrentDate) % 14 < 7
    THEN 'Group1' ELSE 'Group2' END AS Result
;

<强>结果

+------------+------------+-------------------+-------------------+--------+
| TotalDays1 | TotalDays2 | DayNumberInGroup1 | DayNumberInGroup2 | Result |
+------------+------------+-------------------+-------------------+--------+
|         80 |         73 |                10 |                 3 | Group2 |
+------------+------------+-------------------+-------------------+--------+

我在结果中包含了中间计算,以帮助理解发生了什么。