1

今月の第 4 営業日を知りたいというクエリを書きたいとします。どうやってそれをしますか?主に7月4日がめちゃくちゃなので、どこから始めればよいかわかりません...

ありがとう!

4

3 に答える 3

2

ほとんどの企業には、組織の稼働日を示す内部カレンダーがあります。これは通常、土曜日、日曜日、および組織が遵守することを選択した祝日を除外します。

私の最初のアドバイスは、そのようなカレンダーが使用できるかどうかを確認することです. そうであれば、クエリは簡単になります。

次のようなテーブルを想定します:-

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

幸いなことに、組織にカレンダーがない場合でもカレンダーを作成して、稼働日と非稼働日を最もよく理解していることを記入できます。

于 2013-01-28T15:27:02.157 に答える
0

日付を日単位でインクリメントし、休日ではなく平日をチェックするロジックを備えた単純なループでうまくいきます。

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
于 2013-01-28T15:48:07.287 に答える
-1

以下のクエリを試してください...それはあなたを助けるでしょう....

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営業日

于 2013-01-28T15:31:12.590 に答える