gpt4 book ai didi

sql - 在sql中模拟Excel网络日

转载 作者:行者123 更新时间:2023-12-04 21:13:21 25 4
gpt4 key购买 nike

我相信有人已经想办法用其他编程语言模拟 Excel networkdays 功能。
如果您能分享,我将不胜感激。
谢谢

最佳答案

这个想法是计算每个日期的一周开始之间的工作日,然后应用各种偏移量。

  • 查找每个日期之前的星期六之间的天数
  • 除以 7 再乘以 5 得到工作日数
  • 开始日期是否晚于结束日期的总偏移量
  • 再次偏移开始是否在结束之后并且开始是星期六
  • 再次询问开始是否在之后,结束是否在星期日
  • 再次检查开始是否不在之后并且开始是星期日
  • 再次询问开始是否不在之后,结束是否是星期六

  • 将一些随机日期添加到表中。
    declare @t table ([start] datetime, [end] datetime)
    insert into @t values ('2088-01-14 11:56:23','2011-11-10 03:34:09')
    insert into @t values ('2024-09-24 10:14:29','2087-09-16 15:52:06')

    然后计算这些日期的 NETWORKDAYS。
        select [start],[end]
    ,((datediff(day,0,[end])-datepart(dw,[end]))-(datediff(day,0,[start])-datepart(dw,[start])))/7*5 --[weekdays]
    + datepart(dw,[end]) - datepart(dw,[start]) --[weekday diff]
    + case when datediff(day,0,[start]) > datediff(day,0,[end]) then -1 else 1 end --[start after]
    + case when datediff(day,0,[start]) > datediff(day,0,[end]) and datepart(dw,[start]) = 7 then 1 else 0 end --[start after and start saturday]
    + case when datediff(day,0,[start]) > datediff(day,0,[end]) and datepart(dw,[end]) = 1 then 1 else 0 end --[start after and end sunday]
    + case when datediff(day,0,[start]) <= datediff(day,0,[end]) and datepart(dw,[start]) = 1 then -1 else 0 end --[start not after and start sunday]
    + case when datediff(day,0,[start]) <= datediff(day,0,[end]) and datepart(dw,[end]) = 7 then -1 else 0 end --[start not after and end saturday]
    as [networkdays]
    from @t

    关于sql - 在sql中模拟Excel网络日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4767627/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com