0

SQL Server 2008을 사용하고 있고 ResidencyStatus 인 내 테이블에서 계산 열을 만들었습니다. ResidencyStatus에서 datediff 사용하기 현재 날짜 (현재 날짜)와 다른 날짜 열 ResidencyDate 사이의 차이점을 알고 싶습니다. 결과는 (이하 또는 6 개월 같음)보다 작거나 183일 동일한 경우 Datediff 계산 된 열 지정 수식을 사용하여 동등한 문자열 값으로 일 계산

  • 지금, 그때 ResidencyStatus에서 문자열 '과도'를 넣어합니다.

  • 결과가 184 일 (6 개월 및 1 일 이상)이고 1825 일 이하 (4 년 및 364 일 이하) 인 경우 가치는 '이주자'가됩니다.

  • 결과가 1826 일 (5 년 이상) 인 경우 값은 '상주'입니다.

난 계산 열이 식을 사용하여 시도 :

(case when (datediff(day,[ResidencyDate],getdate()))<=183 then 'Transient' elseif (datediff(day,[ResidencyDate],getdate())>=184 and <=1825 then 'Migrant' elseif (datediff(day,[ResidencyDate],getdate())>=1826 then 'Resident' end 

하지만이 오류가 발생 "오류 칼럼 ResidencyStatus의 수식 검증." 이 공식을 만드는 방법에 대한 아이디어 나 다른 해결책을 제시해 주시겠습니까?

+0

대신 elseif를 사용하십시오. – NP3

답변

1

사용합니다. case 문은 일련의 when 절을 사용하며 순서대로 평가됩니다. 따라서 원하는 내용을 다음과 같이 표현할 수 있습니다.

(case when datediff(day, [ResidencyDate], getdate()) <= 183 then 'Transient' 
     when datediff(day, [ResidencyDate], getdate()) <= 1825 then 'Migrant' 
     else 'Resident' 
end) 

좋아요, 이것은 로직과 약간의 차이가 있습니다. else에는 NULL 값이 포함됩니다. 수정하기가 쉽습니다.

(case when datediff(day, [ResidencyDate], getdate()) <= 183 then 'Transient' 
     when datediff(day, [ResidencyDate], getdate()) <= 1825 then 'Migrant' 
     when datediff(day, [ResidencyDate], getdate()) > 1825 then 'Resident' 
end) 

이렇게하면 NULL이 반환됩니다.

+0

'Migrant'는'...> = 184' –

+0

@NoDisplayName을 확인하기 위해 실종되었다고 생각합니다. . . 그 수표는 불필요합니다. 첫 번째'where' 절은이 경우를 처리합니다. –

+0

그것은 작동했다 !!! 네 말이 맞아, 나는 NULL 값을 포함하고 싶지 않아. 감사!!! – Irond64dpool

1

시도해보십시오.

select 
    .... 
    CASE 
    WHEN (Datediff(day, [ResidencyDate], Getdate())) <= 183 THEN 'Transient' 
    WHEN Datediff(day, [ResidencyDate], Getdate()) >= 184 
      AND Datediff(day, [ResidencyDate], Getdate()) <= 1825 THEN 'Migrant' 
    ELSE 'Resident' 
    END 
    ..... 
    ..... 

또는 case 문의 elseif 같은 건 없다 Between

select 
    .... 
    CASE 
    WHEN (Datediff(day, [ResidencyDate], Getdate())) <= 183 THEN 'Transient' 
    WHEN Datediff(day, [ResidencyDate], Getdate()) Between 184 and 1825 THEN 'Migrant' 
    ELSE 'Resident' 
    END 
    ..... 
    ..... 
+0

주의를 기울이고 내 질문에 답변 해 주신 것에 감사드립니다 !!! – Irond64dpool