您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使用sql server获取一周中的上一个工作日与当前工作日的工作日

如何使用sql server获取一周中的上一个工作日与当前工作日的工作日

SELECT  DATEADD(DAY, CASE DATENAME(WEEKDAY, GETDATE()) 
                        WHEN 'Sunday' THEN -2 
                        WHEN 'Monday' THEN -3 
                        ELSE -1 END, DATEDIFF(DAY, 0, GETDATE()))

我更喜欢将其DATENAME用于类似这样的事情,DATEPART因为它消除了对设置的需要,DATEFIRST并确保本地计算机上时间/日期设置的变化不会影响结果。最后DATEDIFF(DAY, 0, GETDATE())将消除时间部分,GETDATE()消除了需要转换为varchar的过程(速度要慢得多)。

这个答案很早就在我的职业生涯中,每次都被投票否决让我很烦,因为我不再同意使用DATENAME的想法。

更为有效的解决方案是:

SELECT  DATEADD(DAY, CASE (DATEPART(WEEKDAY, GETDATE()) + @@DATEFIRST) % 7 
                        WHEN 1 THEN -2 
                        WHEN 2 THEN -3 
                        ELSE -1 
                    END, DATEDIFF(DAY, 0, GETDATE()));

这将适用于所有语言和DATEFIRST设置。

SQLServer 2022/1/1 18:37:56 有532人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶