2012-04-10 1 views
0

SQL Server를 사용하고 있는데 문제가 하나뿐입니다. 나는대로 DATEDIFF 함수를 사용했다 :SQL Server의 DATEDIFF 함수 - 다른 경우에 따라 다르게 실행됩니다.

select datediff(dd,'1935-12-07','2010-03-02')/365.00 ---> 74.28 
select datediff(dd,'1935-12-07','2010-03-02')/365  ---> 74 
select datediff(yy,'1935-12-07','2010-03-02')   ---> 75 

당신은 내가 'DD'와 DATEDIFF를하려고하면 나는 74/74.28로 차이를받을 것을 관찰 할 수 있습니다. 하지만 'yy'와 함께 사용하면 나는 diference를 75로 얻습니다.

왜 이렇게 되나요? 의미 차이가 거의 74에 가까워지는 이유는 무엇입니까?

두 경우 모두이 기능이 필요합니다. 하지만 다르게 행동하고 있으므로 많은 문제에 직면하고 있습니다.

나에게이 문제에 대한 해결책을 제안하십시오.

감사합니다.

+1

DATEDIFF()가 어떻게 작동하는지 이해하는 핵심 구는 [manual] (http://msdn.microsoft.com/en-US/library/ms189794.aspx "DATEDIFF (Transact-SQL) ") : * 지정된 시작일과 종료일 사이에 ** 지정된 날짜 부분 경계의 개수 (부호있는 정수)를 반환합니다. * –

답변

1

첫 번째 경우 = 당신은 암시 적으로 float로 캐스팅하고, 올바른 결과를 보여줍니다

두 번째 경우 = 당신은 내재적으로 변환의 일환으로 내림하는 int, (바닥 값)에 캐스팅하고

세 번째 경우 = 당신은 아무것도 전혀 캐스팅하지 않는, 그리고 DATEDIFF()은 (천장 값)

솔루션 반올림 서명 int를 반환 : 당신이 원하는,하지만 코드 전반에 걸쳐 일관성을 유지합니다.

+0

답장을 보내 주셔서 감사합니다. 천장 값으로 반올림하는 동작은 문제가 없습니다. 하지만 이런 식으로 시도하면 : round (datediff (dd, '1935-12-07', '2010-03-02')/365.00,0)를 선택하면 여전히 74가됩니다. yy '. 그게 내 질문은 무엇입니까? –

1

당신이을 지정한 날짜 부분의 차이에 대한 datediff 기능 검사, 그래서 두 날짜의 연도 부분에서의 차이를 말하는 올바른지은 75

또는 단어 그것과 같다 Microsoft의 사람들은 해당 날짜 부분을 넘은 경계 수를 계산합니다. 귀하의 예에서 두 날짜 사이에 75 년 경계가 교차되었습니다.

this msdn 페이지를 보시면 작동 방법이 설명되어 있습니다.

관련 문제