首页 > 解决方案 > 选择下个月的第一个工作日

问题描述

我正在尝试修改我在这里找到的其他人的代码以找到下个月的第一个工作日(链接)

SELECT CASE 
    WHEN DATENAME(WEEKDAY, dateadd(mm, DATEDIFF(MM, 0, getdate()), 0)) = 'Saturday'
        THEN dateadd(mm, DATEDIFF(MM, 0, getdate()), 0) + 2
    WHEN DATENAME(WEEKDAY, dateadd(mm, DATEDIFF(MM, 0, getdate()), 0)) = 'Sunday'
        THEN dateadd(mm, DATEDIFF(MM, 0, getdate()), 0) + 1
    ELSE dateadd(mm, DATEDIFF(MM, 0, getdate()), 0)
    END

这是我想出的(不起作用):

select CASE 
                WHEN DATENAME(WEEKDAY, eomonth(dateadd(mm, DATEDIFF(MM, 0, getdate()),1), 0 )) = 'Saturday'
                    THEN eomonth(dateadd(mm, DATEDIFF(MM, 0, getdate()), 0),1) + 2
                WHEN DATENAME(WEEKDAY, eomonth(dateadd(mm, DATEDIFF(MM, 0, getdate()),1), 0)) = 'Sunday'
                    THEN eomonth(dateadd(mm, DATEDIFF(MM, 0, getdate()), 0),1) + 1
                ELSE eomonth(dateadd(mm, DATEDIFF(MM, 0, getdate()), 1),1)
                end

谢谢您的帮助!

标签: sqlsql-server

解决方案


您的查询实现看起来像 SQL 服务器。您可以使用DATEFROMPARTSEOMONTH函数获取下个月的第一天,然后在 CASE 表达式中使用 DATENAME 来确定第一个工作日,如下所示(仅限 SQL Server)。

-- get first day of next month using DATEFROMPARTS
Declare @NextMonthFirstDate datetime = DATEFROMPARTS(YEAR(GETDATE()),MONTH(GETDATE())+1,1)

-- then use CASE expression 
Select CASE WHEN DATENAME(WEEKDAY, @NextMonthFirstDate) = 'Sunday'
                THEN @NextMonthFirstDate + 1
            WHEN DATENAME(WEEKDAY, @NextMonthFirstDate) = 'Saturday'
                THEN @NextMonthFirstDate + 2
            ELSE @NextMonthFirstDate END as FirstWeekDayOfnextMonth

推荐阅读