2014-06-06 3 views
0

두 개의 날짜 (reportStartDate, reportEndDate)를 사용하는 저장 프로 시저를 만들려고합니다.Sql Server select case dates

아이디어는 "reportStartDate"와 "reportEndDate"사이의 근무일을 포함하여 "startDate", "endDate"및 "term"이 중요한 열이지만 "startDate"및 "endDate" inbetween the "reportStartDate"및 "reportEndDate"그래서 내가 이런 일이 있는지 확인하고 요일을 해결하기 위해 그 날짜를 사용해야합니다 가을 수 있습니다. ("기간"= 1 다음 "endDate가"다른 사용 "reportEndDate"를 사용하는 경우)

이 나는 ​​일 분명히 아무튼 저장 프로 시저에 대한

(DATEDIFF(dd,startDate,endDate) - (2* DATEDIFF(wk,startDate,endDate)))+1 AS BusinessDayCount

그리고이 얻을이 코드를 사용 업무가

Create PROCEDURE testPro( 
@reportStartDate date, 
@reportEndDate date  
)  
AS 
BEGIN  
SELECT emp, surname, startDate, endDate, 
CASE WHEN startDate<= @reportStartDate 
THEN (DATEDIFF(dd,@reportStartDate, @reportEndDate) - (2* DATEDIFF(wk,@reportStartDate,@reportEndDate)))+1 AS BusinessDayCount 
ELSE (DATEDIFF(dd,startDate, @reportEndDate) - (2* DATEDIFF(wk,startDate,@reportEndDate)))+1 AS BusinessDayCount END 
FROM Table_1 
END 
EXEC testPro '2012-01-01', '2012-12-31' 

누구든지 올바른 방향으로 나를 도울 수 있습니다. 감사합니다

+1

'분명히 작동하지 않습니다. '왜? 이것에 대해 더 자세히 설명하십시오. – Rahul

답변

0

나는 case 문을 제외하고 당신의 절차에 어떤 문제도 보이지 않습니다.

case when (condition) then some_value 
else some_other_value end as some_alias_name 
+0

대단히 감사합니다. 완벽하게 작동했습니다. – Cheesy

0

다음은 SQL 서버에서 잘 작동합니다 :

CREATE PROCEDURE testPro @reportStartDate date, @reportEndDate date
AS
SELECT emp, surname, startDate, endDate, (DATEDIFF(dd, @reportStartDate, @reportEndDate) + 1) -(DATEDIFF(wk, @reportStartDate, @reportEndDate) * 2) -(CASE WHEN DATENAME(dw, @reportStartDate) = 'Sunday' THEN 1 ELSE 0 END) -(CASE WHEN DATENAME(dw, @reportEndDate) = 'Saturday' THEN 1 ELSE 0 END) AS BusinessDayCount FROM Table_1 GO

내가 가진 BusinessDayCount에 대한 귀하의 계산을 대체 한 이는 같은

CASE WHEN startDate<= @reportStartDate 
THEN (DATEDIFF(dd,@reportStartDate, @reportEndDate) - (2* 
DATEDIFF(wk,@reportStartDate,@reportEndDate)))+1 
ELSE (DATEDIFF(dd,startDate, @reportEndDate) - (2* 
DATEDIFF(wk,startDate,@reportEndDate)))+1 END AS BusinessDayCount 

구문 이하가되어야한다 약간 더 정확한 다른 계산 (월요일에서 금요일까지 영업일을 가정 함)이 아니라면 그 비트를 간단히 대체 할 수 있습니다. 코드는 다음과 같습니다 :

+0

감사합니다. 솔루션도 사용할 수 있습니다. – Cheesy