首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到一个月的第三个工作日(星期六和星期日是周末)?

如何找到一个月的第三个工作日(星期六和星期日是周末)?
EN

Stack Overflow用户
提问于 2019-07-23 14:06:33
回答 2查看 665关注 0票数 1

我需要在几个条件下找到下一个最后的工资期限。到期日为3个月,但最后一次发薪日期为当月的第三个营业日。从О的角度来看,是4个月的成熟期。星期六和星期天不是工作日。例如:现在在2019年8月是3.08和4.08不是工作日,当客户交税到5.08(星期一--这是8月的第三个营业日),下一个发薪日是2019年底。否则,当日期是6.08是到11月底的期间

代码语言:javascript
复制
IF @Schema = '1000' 
BEGIN

SET @PayPeriod = 3
IF @Payday < DATEADD(DAY, CASE (DATEPART(WEEKDAY, DATEADD(MONTH, DATEDIFF(MONTH, 0, @Payday), 0)) + @@DATEFIRST) % 7 
                                        WHEN 6 THEN 2
                                        WHEN 7 THEN 1 ELSE 0 END,
                                        DATEADD(MONTH, DATEDIFF(MONTH, 0, Payday), 3)) 
SET @PayPeriod = EOMONTH(@Payday, @PayPeriod-1)
ELSE SET @PayPeriod = EOMONTH(@Payday, @PayPeriod)
            END

这就是结果。06.08.2019之后必须是11月底的发薪期。

2019-08-01 2019-10-31

2019-08-02 2019-10-31

2019-08-03 2019-10-31

2019-08-04 2019-11-30 2019-08-05 2019-11-30这里是问题所在!

2019-08-06 2019-11-30

EN

回答 2

Stack Overflow用户

发布于 2019-07-23 15:21:20

这应该适用于你:

代码语言:javascript
复制
declare @payday as datetime = '20190602'

;with cte as ( 
    select datefromparts(year(@payday), month(@payday), 1) as monthday
    union all
    select dateadd(day,  1, monthday)
    from cte
    where day(monthday) < 10

    )
select 
    case 
        when count(*) <= 3 then eomonth(@payday, 3)
        else eomonth(@payday, 4)
    end as MaturityEnd
from cte
where datepart(weekday, monthday) not in (7, 1)
 and monthday <= @payday

在这里,我们生成与付款日期相同的月份的前几个日期,并计算比付款日期更小的营业天数。到期日是根据天数计算的。

票数 1
EN

Stack Overflow用户

发布于 2019-07-23 15:01:24

还不完全清楚你想从你的问题中得到什么。我相信你想要的是:

  • 给出一个日期@@DATEFIRST找到一个到期日
  • 3个月后,除非
  • 这个日期是在一个月的前3个工作日内。
  • 4个月后

对吗?

那么EOMONTH是做什么的呢?与声明的要求相比,在示例中使用它似乎没有意义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57166009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档