【发布时间】:2014-08-29 18:40:45
【问题描述】:
我需要能够选择比当前日期早 60 个工作日的开始日期。我有一个包含日期和工作日期等的日历。我目前(但不成功)的方法如下:
DECLARE @Mode int
SET @Mode = 0
SET @StartDate = CASE WHEN @Mode = 0
THEN (SELECT BusDate FROM Leads.dbo.Calendar
WHERE Date = DATEADD(DAY,DATEDIFF (DAY,0,GETDATE())-60,0))
WHEN @Mode = 1
THEN DATEADD(mm,DATEDIFF (mm,0,GETDATE())-2,0)
END
此方法可追溯到 60 个日历日,而不是 60 个工作日。我面临着将其归结为工作日的挑战。忽略 Mode = 1 部分(按月计算)。 任何帮助将不胜感激。
The Calendar table has the following fields:
SELECT [Date]
,[MMDDYYYY]
,[Year]
,[QTR]
,[Month]
,[Week]
,[YTDDay]
,[QTDDay]
,[MTDDay]
,[WeekDayNbr]
,[Quarter]
,[MonthLName]
,[MonthName]
,[DayOfWeekS]
,[DayOfWeek]
,[KindOfDay]
,[Description]
,[Period]
,[YrMo]
,[YrWk]
,[StartDate]
,[EndDate]
,[BusPeriod]
,[Holiday]
,[NonBus]
,[BusDaysInMonth]
,[BusDay]
,[BusDaysRemain]
,[BusDate]
,[YYYYMMDD]
BusDay 是一个月的工作日(1、2、3 等)。目前没有一列表示 1 表示是,0 表示否表示这是工作日,尽管我可以补充一下。 NonBus 和 Holiday 字段以这种方式运行:1 是假期或非工作日(假期和周末),0 不是。
【问题讨论】:
-
您需要一个日历表。这是一篇解释这类事情的文章。 sqlservercentral.com/articles/T-SQL/70482
-
您需要排除节假日还是只排除周末?
-
请提供
calendar表中的架构和数据
标签: sql sql-server tsql