sql - 选择下个月的第一个工作日
问题描述
我正在尝试修改我在这里找到的其他人的代码以找到下个月的第一个工作日(链接):
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
谢谢您的帮助!
解决方案
您的查询实现看起来像 SQL 服务器。您可以使用DATEFROMPARTS或EOMONTH
函数获取下个月的第一天,然后在 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
推荐阅读
- php - PHP MYSQL 输入表单需要输入特定的单词
- bash - 我应该如何在 bash 中有效地基于公共文本字符串提取和组合部分文件?
- python - Python子进程错误:Popen,调用,运行“没有这样的文件或目录:错误
- javascript - 将字符串拆分为对象 JavaScript
- html - 容器内的 CSS 行
- django - 如何配置 Django url 以指向页面中的特定部分?
- django - Django 1.11 - 为生产中的现有用户添加权限
- node.js - vuejs 生产时出现语法错误
- java - 在 Citrus TestNG 测试期间 Spring Boot 未加载测试特定应用程序属性
- dns - 了解 BIND DNS named.stats 统计信息