我有以下内容可以获得每两周一次的付费日期,周六从星期六开始 当我运行它假设今天的日期是2016年2月22日我得到以下
但它实际上应该是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
答案 0 :(得分:0)
确定。感谢您的所有评论。我决定让用户在设置中指定第一个付款期限结束日期,然后我用它来计算其余的付款期限。