【发布时间】:2021-12-18 13:08:49
【问题描述】:
我正在尝试计算每个日历月的工作日数。例如,在 11 月份,有 22 个工作日(1、2、3、...、22)。星期六和星期日将被视为前一个星期五(例如 11 月 1 日、2 日、3 日、4 日、5 日、5 日、5 日、6 日、7 日、8 日、9 日、10 日、10 日、10 日、11 日、...、22 日)。
我在下面写的逻辑不起作用。请问谁能帮我解决这个问题?
SELECT Date
, datepart(DW, DATE) AS DayName
, DATENAME(DW, DATE) ax
, datepart(DW, DATE)-1 AS DayName1
, CASE WHEN datepart(DW,DATE)-1 IN (0,6) THEN 5 ELSE datepart(DW,DATE)-1 END bx
FROM [STAGING_4_6_DIM_CALENDAR_V2]
ORDER BY 1 ASC
【问题讨论】:
-
您当前的查询有什么问题?
-
case 语句返回这个输出,这不是我打算实现的 1 2 3 4 5 5 5 1 2 3 4 5 5 5
-
您说
Saturday and Sunday will be seen as the preceding Friday...您当前的输出在我看来是正确的。 -
虽然以上是特定于语言的。
WEEKDAY根据您的@@DATEFIRST设置返回不同的值,该设置与LOGIN的语言设置相关联。就个人而言,由于您有一个日历表,我会将工作日编号存储在其中。 -
当月 - 11 月的天数必须继续为第 22 天。但查询并没有这样做。
标签: sql date tsql sql-server-2008 calendar