-1

雇用日 (記念日) に基づいて従業員が働いた日数を計算する SQL クエリがあります。ただし、これらの日には週末が含まれているため、土日を除外する必要があります。使ってみましDATEADD(dw, ...)たがダメでした。

SELECT PRCo, Employee,LastName, FirstName, MidName,SSN,HireDate,
(case when 
      DATEADD(year, datediff(year, HireDate, getdate()), HireDate) < GETDATE()
 then DATEDIFF(dd, DATEADD(year, datediff(year, HireDate, getdate()), HireDate), getdate())
 else DATEDIFF(dd, DATEADD(year, datediff(year, HireDate, getdate()) - 1, HireDate),
               getdate()) end) as HRSDATE
FROM dbo.PREH
4

4 に答える 4

1

これを実現する簡単な方法は、カレンダー テーブルを作成し、日付、曜日、および年間通算日をすべてテーブルにロードすることです。次に、従業員の開始日からの日数を選択するだけです。曜日は != 土曜日または日曜日です。

于 2013-07-17T14:09:22.750 に答える
1

結果から差し引くだけ2 * number of weeksですか?

于 2013-07-17T15:11:40.217 に答える
0

正確にする必要がある場合は、
STEP01 SUBTRACT 2 倍の整数 (DATEDIFF RESULT) を 7 で割った
値 STEP02 THEN 7 から曜日 (START DATE) の数値 (USE DATEPART) を引いた値をとります
STEP03 AND それが数値より大きい場合 (DATEDIFF RESULT) ) 、2 を減算します。

DECLARE @start AS datetime = '10/24/2014'

DECLARE @end AS datetime = '10/31/2014'
SELECT CAST(DATEDIFF("d",CAST(@start AS datetime),CAST(@end AS datetime)) AS int)AS STEP_ONE_OrigDays
--,CAST(DATEDIFF("d",CAST(@start AS datetime),CAST(@end AS datetime)) AS money)*(1.000*(5.000/7.000)) AS EstDays
,(2.000*(CAST(DATEDIFF("d",CAST(@start AS datetime),CAST(@end AS datetime)) AS money)/7)) AS STEP_TWO--SUBTRACT 2 times the number integer divided by 7
,DATEPART(dw, @start) AS STEP_THREE_WEEK_DAY_NUMBER --WEEK DAY #
,7 - DATEPART(dw, @start) AS STEP_FOUR_SEVENminus_WEEK_DAY_NUMBER --7 minus WEEK DAY #
,CAST(CAST(DATEDIFF("d",CAST(@start AS datetime),CAST(@end AS datetime)) AS money)
-(2.000*(CAST(DATEDIFF("d",CAST(@start AS datetime),CAST(@end AS datetime)) AS money)/7))
+CASE 
WHEN (7.000-DATEPART(dw, @start)) > CAST(DATEDIFF("d",CAST(@start AS datetime),CAST(@end AS datetime)) AS money) 
THEN -2.000
ELSE 0.000 
END AS int) AS ExactDays_NOT_IncludingDayOf --JAH EXCLUDE WEEKEND Fx NOT Including the Day of
,CAST(CAST(DATEDIFF("d",CAST(@start AS datetime),CAST(@end AS datetime)) AS money)-(2.000*(CAST(DATEDIFF("d",CAST(@start AS datetime),CAST(@end AS datetime)) AS money)/7))
+CASE 
WHEN (7.000-DATEPART(dw, @start)) > CAST(DATEDIFF("d",CAST(@start AS datetime),CAST(@end AS datetime)) AS money) 
THEN -2.000
ELSE 0.000 
END AS int)+1 AS ExactDays_IncludingDayOf --JAH EXCLUDE WEEKEND Fx INCLUDING the Day of
于 2014-10-16T22:37:32.303 に答える