2014-04-25 6 views
1

나는 하루 이상 지난 최신 날짜를 선택하고 싶습니다. 두 개의 날짜 유형 열이 있습니다. Column1이 디폴트 (널이 아닌)가되어, column2가 null가 아닌 경우는 항상 column1보다 커집니다.MS SQL DATEDIFF 최대 두 날짜

나는 현재, 컬럼 기반으로 물론

select * from table where 0<(DATEDIFF(day, column1, getdate()) 

이 만 반환합니다.

null이 아닌 경우 어떻게 column2의 사용을 구현할 수 있습니까?

감사

답변

1

쿼리의 경우 일부의 첫 번째 null이 아닌 값을 반환하는 데 사용 ISNULL(column2, column1).

그래서 2 열 null가 아닌 경우, 그를 돌아갑니다 - null의, 그렇지 않은 경우 - 당신은 첫 번째 null이 아닌 열을 반환하는 coalesce를 사용할 수는 1

0

를 돌아갑니다 :

SELECT * 
FROM table 
WHERE 0 < (DATEDIFF(DAY, COALESCE(column2, column1), getdate()) 
0

날짜에 where 절에서 비교할 때 열에 함수를 사용하지 않는 것이 가장 좋습니다. 이것은 일반적으로 인덱스가 사용되는 것을 방지합니다.

하루가 지난 최신 날짜를 원한다면 아마도 이것이 원하는 것일 수 있습니다. 이 쿼리는 상단에 오래된 일보다 가장 최근의 날짜 행을 주문합니다

select * 
from table 
order by (case when column2 < getdate() - 1 then column2 
       when column1 < getdate() - 1 then column1 
       else '0000-00-00' 
      end) desc; 

사용 top 1 가장 최근을 얻을 수 있습니다.