[英]Declare date, then add next business day
我没有得到所需的结果。
我要做的就是声明我的日期,然后再添加下一个工作日。 即。 @CASHDATE+1
(此方法有效),但我需要下一个工作日为5日。
DECLARE @CASHDATE DATETIME
SET @CASHDATE='2016-12-02'
SELECT <<COLUMN_NAME>> FROM <<TABLE_NAME>>
WHERE RECEIVED_DATE = @CASHDATE /*'2016-12-02'*/
AND TRANS_POST_DATE = @CASHDATE+1 /*'2016-12-05'*/) <== I don't want it to be '2016-12-03 or 04', I'm trying to get the next business day.
任何关于如何实现这一目标的想法都将受到欢迎。 我一直在尝试DATEPART(dw, @CASHDATE) NOT IN (1, 7)
但我只是无法获得想要的结果。
使用命令DATEADD:
AND TRANS_POST_DATE = DATEADD (dd, 1, @CASHDATE)--@CASHDATE+1
发挥作用 一分钟很容易...
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
/*
declare @date datetime
set @date = '2016-12-10'
declare @newDate datetime
select @newDate = dbo.[GetBussinesDay](@date)
select @date, @newDate
*/
create FUNCTION [dbo].[GetBussinesDay]
(
@Date as datetime
)
RETURNS datetime
AS
BEGIN
declare @NewDate datetime
declare @BussinessDays table ( bDay int)
insert into @BussinessDays VALUES (2) --mon
insert into @BussinessDays VALUES (3) --Tue
insert into @BussinessDays VALUES (4) --Wed
insert into @BussinessDays VALUES (5) --Thu
insert into @BussinessDays VALUES (6) --Fri
if exists(select bDay from @BussinessDays where bDay = DATEPART(dw,@Date))
begin
set @NewDate = @Date;
end
else
begin
set @NewDate = dbo.GetBussinesDay(dateadd(dd,1,@Date));
end
return @NewDate
END
创建函数并更改代码:
AND TRANS_POST_DATE = dbo.GetBussinesDay( @CASHDATE)--@CASHDATE+1
另外,您可以在功能中更改商务日...以更改期货或规则。
DATEADD(day,
CASE
WHEN DATENAME(dw,CASHDATE) = 'Friday' THEN 3
WHEN DATENAME(dw,CASHDATE) = 'Saturday' THEN 2
ELSE 1
END,
CASHDATE)
这是一个示例,向您展示如何计算
DECLARE @Dates AS TABLE (CASHDATE DATETIME)
INSERT INTO @Dates VALUES ('2016-11-28'),('2016-11-29'),('2016-11-30'),('2016-12-01'),('2016-12-02'),('2016-12-03'),('2016-12-04')
;WITH cteNextBizDays AS (
SELECT
CASHDATE
,NextBusinessDay = DATEADD(day,
CASE
WHEN DATENAME(dw,CASHDATE) = 'Friday' THEN 3
WHEN DATENAME(dw,CASHDATE) = 'Saturday' THEN 2
ELSE 1
END
,CASHDATE)
FROM
@Dates
)
SELECT
CASHDATE
,DATENAME(dw,CASHDATE) CashDateDayOfWeek
,NextBusinessDay
,DATENAME(dw,NextBusinessDay) NextBusinessDayDayofWeek
FROM
cteNextBizDays
使用DATEPART(dw,Date)
时需要考虑的考虑因素之一是DATEFRIST设置。 与DATENAME相比,您不必担心。
您可以使用DATEDIFF
和DATEADD
函数:
DECLARE @CASHDATE datetime='2016-12-03'
SELECT
CashDate = @CASHDATE,
NextBusinessDay =
DATEADD(DAY,
CASE
WHEN DATEDIFF(DAY, 0, @CASHDATE) % 7 > 3
THEN 7 - DATEDIFF(DAY, 0, @CASHDATE) % 7
ELSE 1
END,
@CASHDATE
)
DATEDIFF(DAY, 0, @CASHDATE) % 7
确定@CASHDATE
是星期@CASHDATE
。 在此基础上,添加下一个星期一之前的必要天数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.