2017-03-06 7 views
0

2つの日付の間の作業日数をSQLで計算します。たとえば、開始日は3/1/2017、終了日は3/10/2017なので、結果は10日ではなく8日でなければなりません。どのようにSQLサーバーでそれを達成する。ありがとう2つの日付間の作業日数を計算するSQLを使用したい

+0

必要ですか? –

+1

http://www.sqlservercentral.com/articles/Advanced+Querying/calculatingworkdays/1660/ –

+0

http://stackoverflow.com/questions/7388420/get-datediff-excluding-weekends-using-sql-server – Sam

答えて

0

日付範囲内の土曜日と日曜日以外の日を表示したい場合。その後、

クエリ

declare @start as date = '2017-03-01'; 
declare @end as date = '2017-03-10'; 
declare @i as int = 0; 
declare @j as int = datediff(day, @start, @end) 
declare @t as table([date] date, [dayname] varchar(50)); 

while(@i <= @j) 
begin 
    insert into @t([date], [dayname]) values 
    (dateadd(day, @i, @start), Datename(weekday, dateadd(day, @i, @start))); 
    set @i += 1; 
end 

select * from @t 
where [dayname] not in('Saturday', 'Sunday'); 

Demo Here

0

あなたはこのクエリを試すことができます:あなたが考慮に入れるべき祝日を

;with work_days as (
    -- CTE of work days 
    select 2 [day_of_week] union -- Monday 
    select 3 union    -- Tuesday 
    select 4 union    -- Wednesday 
    select 5 union    -- Thursday 
    select 6      -- Friday 
) 
,dates_between as (
    -- recursive CTE, for dates in range 
    select cast('20170301' as date) [day] 
    union all 
    select dateadd(day,1,[day]) from dates_between 
     where [day]=[day] and [day]<'20170310' 
) 
select * 
from dates_between join work_days 
    on work_days.day_of_week = DATEPART(dw, dates_between.[day]) 
order by dates_between.[day] 
OPTION (MAXRECURSION 0) -- if dates range more than 100 days 
関連する問題