今月の第 4 営業日を知りたいというクエリを書きたいとします。どうやってそれをしますか?主に7月4日がめちゃくちゃなので、どこから始めればよいかわかりません...
ありがとう!
今月の第 4 営業日を知りたいというクエリを書きたいとします。どうやってそれをしますか?主に7月4日がめちゃくちゃなので、どこから始めればよいかわかりません...
ありがとう!
ほとんどの企業には、組織の稼働日を示す内部カレンダーがあります。これは通常、土曜日、日曜日、および組織が遵守することを選択した祝日を除外します。
私の最初のアドバイスは、そのようなカレンダーが使用できるかどうかを確認することです. そうであれば、クエリは簡単になります。
次のようなテーブルを想定します:-
CREATE TABLE [dbo].[CalendarDays](
[CalendarDayId] [int] IDENTITY(1,1) NOT NULL,
[CalendarDate] [datetime] NOT NULL,
[IsWorkingDay] [bit] NOT NULL,
)
..あなたのクエリは...
SELECT MIN(CalendarDate) FROM CalendarDays
WHERE CalendarDate >= '2013-01-01' AND IsWorkingDay = 1
幸いなことに、組織にカレンダーがない場合でもカレンダーを作成して、稼働日と非稼働日を最もよく理解していることを記入できます。
日付を日単位でインクリメントし、休日ではなく平日をチェックするロジックを備えた単純なループでうまくいきます。
BEGIN
-- some table with known holiday values
DECLARE @tblHolidays TABLE(holiday DATETIME)
INSERT INTO @tblHolidays(holiday) VALUES ('2013-7-4')
-- parameters
DECLARE @month DATETIME
DECLARE @businessDay INT
SET @month = '2013-7-1'
SET @businessDay = 5
-- logic, loop and find only business days
DECLARE @count INT
SET @count = 0
WHILE 1=1
BEGIN
IF DATENAME(weekday, @month) IN ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
AND @month NOT IN (SELECT * FROM @tblHolidays)
BEGIN SET @count = @count + 1 END
IF @count < @businessDay
BEGIN SET @month = @month + 1 END
ELSE
BEGIN BREAK END
END
SELECT @month
END
以下のクエリを試してください...それはあなたを助けるでしょう....
DECLARE @startdate DATETIME
DECLARE @count INT
DECLARE @NDay INT
SET @startdate='07/01/2013' --Date of the month
SET @count=0
set @NDay = 4 --Nth businessday
WHILE @count < @NDay
BEGIN
IF Datename(dw, @startdate) NOT IN ( 'Saturday', 'Sunday' )
BEGIN
SET @startdate=Dateadd(dd, 1, @startdate)
SET @count=@count + 1
END
ELSE
BEGIN
SET @startdate=Dateadd(dd, 1, @startdate)
END
END
SELECT @startdate - 1 'BussinessDay'
72013-07-04 00:00:00.000
月第4営業日