SQL Server:计算双周付款期限日期

时间:2016-02-22 18:34:56

标签: sql sql-server stored-procedures

我有以下内容可以获得每两周一次的付费日期,周六从星期六开始 当我运行它假设今天的日期是2016年2月22日我得到以下

  • 付款期开始日期:2016年2月13日
  • 付款期限结束:02/23/2016

但它实际上应该是2016年2月20日 - 2016年3月4日。这似乎是休息一周。 如果我在星期一开始这一周,那么一切正常。

我做错了什么,任何帮助都会受到赞赏。

CREATE FUNCTION dbo.getFirstWeekDayDate (
     @TargetDay DATETIME,
     @strWeekDayName VARCHAR(25) --Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
)
RETURNS DATE
AS
BEGIN
    DECLARE @Return DATE

    --  Set to first of its year
    SET @TargetDay = DATEADD(dd, -DATEPART(dayofyear, @TargetDay) + 1, @TargetDay)

    ;WITH Dates AS
    (
          SELECT @TargetDay AS DateVal
          UNION ALL
          SELECT DATEADD(d, 1, DateVal) AS DateVal
          FROM Dates
          WHERE DATEADD(d, 1, DateVal) < DATEADD(m, 1, @TargetDay)
    )
    SELECT @Return = MIN(DateVal)
    FROM Dates
    WHERE DATENAME(WEEKDAY,DateVal) = @strWeekDayName

    RETURN @Return
END 
GO

DECLARE
    @periodstart date, @period int, @today date

set @today = '02/22/2016'
set @periodstart = dbo.getFirstWeekDayDate(@today,'Saturday') --get first sat
set @period = datediff(dd,@periodstart,@today)/14

select
    @period AS period,
    dateadd(dd, @period * 14, @periodstart) AS [payPeriodStart],
    dateadd(dd, @period * 14 + 13, @periodstart) AS [payPeriodEnd]

结果

period      payPeriodStart payPeriodEnd
----------- -------------- ------------
3           2016-02-13     2016-02-26

1 个答案:

答案 0 :(得分:0)

确定。感谢您的所有评论。我决定让用户在设置中指定第一个付款期限结束日期,然后我用它来计算其余的付款期限。