本文介绍了最简单的填写工作日表的方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表 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)

这篇关于最简单的填写工作日表的方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 23:40