本文介绍了最简单的填写工作日表的方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个表 working_days
,其中一列日期
类型为日期
I have a table working_days
with one column date
of type date
我需要在美国的工作日填写。
I need to fill it with working days in USA.
你能建议我怎么这样?
手动太长了。
推荐答案
您可以使用递归CTE来实现此目的。这不包括周末。使用 DATEFIRST
你可以弄清楚一个周末的那一天。这个查询应该工作,无论一周中的哪一天设置为 DATEFIRST
。
You can use a recursive CTE to accomplish this. This only excludes the weekends. Using DATEFIRST
you can figure out what day is a weekend. This query should work no matter what day of the week is set to DATEFIRST
.
;WITH DatesCTE
AS (
SELECT CAST('2016-01-01' AS DATE) AS [workingDays]
UNION ALL
SELECT DATEADD(DAY, 1, workingdays)
FROM DatesCTE
WHERE DATEADD(DAY, 1, workingdays) < '2017-01-01'
)
SELECT *
FROM DatesCTE
WHERE ((DATEPART(dw, workingDays) + @@DATEFIRST) % 7) NOT IN (0, 1)
OPTION (MAXRECURSION 366)
这篇关于最简单的填写工作日表的方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!