SQL Server 2012に作業日のみを計算する関数はありますか?SQL Server 2012のNetWorkDaysファンクション
私はこれまで検索してきましたが、今まで運がありませんでした。
ありがとうございます!
SQL Server 2012に作業日のみを計算する関数はありますか?SQL Server 2012のNetWorkDaysファンクション
私はこれまで検索してきましたが、今まで運がありませんでした。
ありがとうございます!
いいえ、SQL Serverは、このような機能を持っていませんが、カレンダーのテーブルを使用することができます。
DECLARE @date_start date = '2016-01-01',
@date_end date = '2016-12-31';
WITH cte as (
SELECT @date_start as [d], 0 as Level
UNION ALL
SELECT DATEADD(day,1,[d]), [level] + 1 as [level]
from cte
WHERE [level] < DATEDIFF(day,@date_start,@date_end)
),
holidays as (--table with holidays (USA)
SELECT * FROM (VALUES
('2016-01-01'),
('2016-01-18'),
('2016-02-15'),
('2016-05-30'),
('2016-07-04'),
('2016-09-05'),
('2016-10-10'),
('2016-11-11'),
('2016-11-24'),
('2016-12-26')) as t(d)
)
SELECT c.d,
CASE WHEN DATEPART(WEEKDAY,c.d) IN (1,7) THEN 0 --Saturday and Sunday, use (6,7) for Friday,Saturday
WHEN h.d IS NOT NULL THEN 0
ELSE 1 END as isWorking
FROM cte c
LEFT JOIN holidays h
ON c.d=h.d
OPTION (MAXRECURSION 1000);
それは2016年とフラグのすべての日付を持つテーブルを生成します - 日が仕事やされていません。以下は
は、あなたがこれを行うことができる方法の高レベルの概要..です
この形式で日付を保持しているダミーのテーブルを作成します...
今date isholiday
20160101 1
20160102 0
従業員を保持しているあなたのメインテーブルから出席は、このスクリプトは、土曜日、日曜日及び祝日を除く総労働日数を計算します。..
select empid,sum(Case when mt.datee is not null then 1 else 0 end) as workingdays
from
dummydatees dt
left join
maintable mt
on dt.datee=mt.datee
where dt.isholiday=0
のようにテーブルの上に参加します。私は休日のためのテーブルを持っていないので、私はすべての休日を一覧表示する必要があります。要件を満たすように変更することができます。
DECLARE @MyCounter int = 0, @TempDate datetime, @EndDate datetime;
SET @TempDate = DATEADD(d,1,'2017-5-27')
SET @EndDate = '2017-6-3'
WHILE @TempDate <= @EndDate
BEGIN
IF DATENAME(DW,@TempDate) = 'Sunday' OR DATENAME(DW,@TempDate) = 'Saturday'
SET @MyCounter = @MyCounter
ELSE IF @TempDate not in ('2017-1-1', '2017-1-16', '2017-2-20', '2017-5-29', '2017-7-4', '2017-9-4', '2017-10-9', '2017-11-11', '2017-12-25')
SET @MyCounter = @MyCounter + 1
SET @TempDate = DATEADD(d,1,@TempDate)
CONTINUE
END
PRINT @MyCounter
PRINT @TempDate
※*の国及び会社*の労働日は? –
週末は金曜日と土曜日です。ありがとう! – user2597012
[2つの日付間の作業日数をカウントする]の可能性のある複製(0120-18752) –