2014-10-24 4 views
0

다른 데이터베이스의 날짜와의 차이를 계산하는 방법이 많이 있다는 것을 알고 있습니다. 내 문제는 동일한 SQL 쿼리를 사용하여 SQL Server와 DB2 모두에서 작동하는 방법이 필요하다는 것입니다.SQL 서버와 DB2의 두 날짜 차이 계산

매년에 나는

CURRENT_TIMESTAMP - [BIRTHDATE] AS AGETHISYEAR 

을 사용할 수 있습니다 그러나 나는 또한 즉 34,4 위격 생일과 현재 날짜에 따라 소수점 형태로 사람의 나이를 알고 싶어요.

SQL Server에서 [BIRTHDATE]의 columntype은 DATETIME이고 DB2에서는 열 유형이 DATE입니다.

형식은 YYYY-MM-DD

이 할 수있는 방법이 무엇입니까?

안부, 알프레드

+0

SELECT DATEDIFF (YY, BIRTHDATE, CURRENT_TIMESTAMP)는 연도의 정수를 반환하며 소수 부분은 이해하지 못합니다. 다음 생일까지 일년 중 원하는 부분을 원하십니까? –

+0

datediff를 일 안에하고 365.25로 나눕니다. 그러나 SQL Server와 DB2는 두 날짜의 차이점을 제공하는 서로 다른 함수를 가지고 있기 때문에 정확히 동일한 SQL을 원할 경우이 둘 중 하나를 사용할 수 없습니다. –

+0

나는 데이터 타입이 거꾸로 있다고 생각한다. DB2에는'DATETIME'이없고, 이전 버전의 SQL 서버에는'DATE'가 없다. 당신은 SQL Server에서 그런 식으로 날짜를 빼낼 수있는 것처럼 보이지 않으며 DB2에서이를 수행하면 10 자리 숫자가 포함 된 숫자가됩니다 (나눌 필요가 있습니다). @DanBracuk - DB2에는'DATEDIFF'가 없으며 _does_에있는'TIMESTAMPDIFF'는 ** 견적 **을 리턴합니다. –

답변

1

은 당신이 될 두 데이터베이스에서 작동 할 함수를 작성할 수있는 유일한 방법은 year(), month()day()을 사용하거나 함수를 직접 작성하는 것 같아요. 두 데이터베이스 간의 날짜 함수에는 그다지 중복이 없습니다.

예를 들어

는 두 날짜 사이의 전체 년 얻으려면, 당신은 사용할 수 있습니다

select (year(CURRENT_TIMESTAMP) - year(birthdate) + 
     (case when month(CURRENT_TIMESTAMP) * 100 + day(CURRENT_TIMESTAMP) < 
        month(birthdate) * 100 + day(birthdate) 
       then -1 else 0 
     end) 
     ) as AgeInYears 

분수 년은 훨씬 더 복잡하다. 물론 각 데이터베이스에는 원하는 것을 얻기위한보다 합리적인 방법이 있습니다. 방법이 다릅니다.

+0

사람 나이 계산 방법이 좋습니다. 나는 그것을 사용할 것이다. (총 나이와 실제 날짜를 기준으로 한 나이를 모두 필요로한다.) 분수령 년도에 360/30- 방법을 사용하기로 결정했을 때, 나는 그 해에 360을 더한 달을 곱하면된다. * 30 더하기 일. 나는 current_timestamp에 대해 이렇게하고 [BIRTHDATE] 그것을 빼고 마침내 360으로 나눕니다. 완벽하게 작동합니다! – Alfred

+0

@ Alfred - 계산이 돌아 오는 몇 가지 포인트가 있음을 알고 있습니까? 실제로 사람보다 나이가 많거나 젊었습니다. 맞습니까? 나는 이것이 당신에게 규제적인 관심사인지 모른다. –

+0

@ Clockwork-Muse 나는 계산 해봤는데 계산 된 나이가 정확하지 않은 것을 발견하지 못했다. – Alfred