2014-02-16 2 views
1

나는이 두 개의 매개 변수가있는 저장 프로 시저 :조건부 어디 기간 동안의 SQL에서 절

WHERE (dbo.Vacancies.StartDate >= @PublishedFrom 
     OR @PublishedFrom IS NULL) 

하지만 경우를 : 나는 PublishedDeadline가 null의 경우 다음 WHERE 조건이 있어야한다고합니다

@PublishedFrom SMALLDATETIME = NULL, 
@PublishedDeadline SMALLDATETIME = NULL 

PublishedDeadline이 비어 있지 않다면

WHERE v.startdate <= @PublishedDeadline 
    and @PublishedFrom <= v.EndDate 
01과 같아야합니다.어떻게 SQL에서 조건부 절을 적용 할 수 있습니까?

WHERE (PublishedDeadline IS NULL 
     AND (
      dbo.Vacancies.StartDate >= @PublishedFrom 
      OR @PublishedFrom IS NULL 
     ) OR (
     PublishedDeadline IS NOT NULL 
     AND v.startdate <= @PublishedDeadline 
     AND @PublishedFrom <= v.EndDate 
     ) 

당신이 저장 프로 시저에서 작업하기 때문에 단지 다른 조건

답변

4

가 당신을 위해 작동해야 다음과 같은 제안하십시오 좀 더 자세한 정보와보다 쉽게 ​​읽을 수있는 쿼리

if (@PublishedDeadline is NULL) 
BEGIN 
    Select * from dbo.Vacancies 
    WHERE (dbo.Vacancies.StartDate >= @PublishedFrom 
    OR @PublishedFrom IS NULL) 
END 
else 
BEGIN 
    Select * from dbo.Vacancies 
    WHERE v.startdate <= @PublishedDeadline 
    and @PublishedFrom <= v.EndDate 
END 
+0

OR 후에 Publishedfrom이 두 번째 부분에 null이 아닌지 확인해야하나요? – DotnetSparrow

+0

쿼리가 어떻게 동작하는지에 따라 달라집니다. 당신의 의도에 대한 모든 정보가 없으면 나는이 질문에 대답 할 수 없습니다. 그러나, 나는 'NULL <= something'과 같은 비교가'NULL' 결과를 줄 것이라고 말할 수 있습니다. – Alexander

+0

@DotnetSparrow 잘 모르겠 으면'PublishedDeadline IS NOT NULL' 후'AND PublishedF NOT IS NOT NULL'을 추가하십시오 – Alexander

0

을 함께 IS NULL/IS NOT NULL 조건을 결합, 당신은 할 수 있습니다 :