2016-11-25 3 views
3

현재 요일에 따라 다른 날짜까지 레코드를 확인해야한다는 요구 사항이 있습니다.SQL의 위치 요일에 따라 달라집니다.

금요일에 다음 주일 전까지는 다음 주 전체를 볼 필요가 있습니다. 다른 어느 날에 그것은 오는 주일까지 현재 주를 점검해야합니다.

현재 아래 내용이 있지만 구문 오류로 인해 작동하지 않습니다. CASE WHENWHERE 절 안에 넣을 수 있습니까?

WHERE 
T0.[Status] IN ('R','P') AND 
((DATEPART(weekday,GETDATE()) = '5' AND 
    T0.[DueDate] >= GETDATE() AND 
    T0.[DueDate] <= DATEADD(day, 15 - DATEPART(weekday, GetDate()), GetDate())) OR 
(DATEPART(weekday,GETDATE()) != '5' AND 
    T0.[DueDate] >= GETDATE() AND 
    T0.[DueDate] <= DATEADD(DAY ,8- DATEPART(weekday,GETDATE()),GETDATE()) 
) 
+1

예, 가능하지만 일반적으로 좋지 않습니다. 대신 AND/OR을 사용하십시오. – jarlh

+1

귀하의 요구 사항을 정확하게 표현한 것이 확실합니까? 금요일에, 당신은 9 일 앞서보아야하지만, 토요일에는 오직 하나만보아야한다는 것을 의미합니다. 대신, 토요일에 8 일 앞당겨 볼 필요가 있다면, 다음 주 금요일과 2 일 추가로 조회하십시오. – hvd

+0

예, hvd. 그것은 틀린 것처럼 보이지만 그게 내게 묘사 된 방법입니다. 내 생각에 어쨌든 주말에 점검하지 않기 때문에 괜찮습니다. 그러나 나는 당신의 요점을 본다. 그리고 아마도 나는 그것에 대해 생각할 때 훨씬 더 단순해질 것이다. – coblenski

답변

3

그것은 논리적 orand 사업자의 일련의이 논리를 만드는 데 훨씬 쉽게

WHEN DATEPART(weekday,GETDATE()) = '5' THEN Your_column1 ELSE your_column2 END 
    ...... 

또는 내부 케이스

,
CASE 
    WHEN DATEPART(weekday,GETDATE()) = '5' THEN 
      CASE WHEN T0.[DueDate] >= GETDATE() 
        AND <= DATEADD(day, 15 - DATEPART(weekday, GetDate()), GetDate()) 
        THEN Your_column1 ELSE your_column2 
      END 
END 
    ...... 
+1

놀랍습니다. 이제는 분명히 밝혀졌습니다. 많은 감사합니다. – coblenski

1

당신의 구문은 잘못된 것입니다, 당신은 assignemnet 대신 THEN 절에 조건 평가를 사용하고 있습니다 :

WHERE 
    T0.[Status] IN ('R','P') 
    AND 
     CASE 
      WHEN DATEPART(weekday,GETDATE()) = '5' 
       THEN T0.[DueDate] >= GETDATE() AND <= DATEADD(day, 15 - DATEPART(weekday, GetDate()), GetDate()) 
      WHEN DATEPART(weekday, GETDATE()) != '5' 
       THEN T0.[DueDate] >= GETDATE() AND <= DATEADD(DAY ,8- DATEPART(weekday, GETDATE()), GETDATE()) 
     END