2014-12-03 2 views
0

달에서 정확한 날짜 차이를 찾는 문제가 있습니다.SQL Server의 DateDiff 함수와 관련된 문제

내 요구 사항은 '당신이 DATEDIFF 함수를 사용하는 경우

difference in months between two dates in 2015-01-25 00:00:00.000 and 2015-04-25 00:00:00.000 should be 3 

difference in months between two dates 2015-01-25 00:00:00.000 and 2015-04-26 00:00:00.000 should be > 3 


    SELECT DATEDIFF(MONTH, '2015-01-25 00:00:00.000', '2015-04-28 00:00:00.000') 

하면, 다음 위의 예제 모두 같은 값 3 즉, SELECT DATEDIFF (MONTH를 반환합니다 같은 2015-01- 25입니다 00 : 00 : 00.000 ','2015-04- 00 : 00 : 00.000 ')은 3입니다. 그러나 3보다 큰 결과가 필요합니다.

단일 선택 쿼리를 사용하여 위의 요구 사항을 어떻게 구현할 수 있습니까?

+0

,'2015년 1월 25일 00 : 00 : 00.000 ','2015 -04-26 00 : 00 : 00.000 ')'? '3.xx'가되기를 원하십니까? – ekad

+0

예 ..i 같은 출력이 필요합니다. – vmb

+0

@ekad .. 반환 된 값이 4 인 경우에도 괜찮습니다. – vmb

답변

2

당신은 달을 계산해야하고이 같은 일 개월 수에 의해 시작 날짜를 발전 계산해야합니다

SQL Fiddle

MS SQL 서버 2008 스키마 설정 :

검색어 1 :

declare @f datetime, @t datetime 
select @f='2015-01-25 00:00:00.000', @t='2015-04-28 00:00:00.000' 
SELECT DATEDIFF(MONTH, @f, @t) as m, 
datediff(d, dateadd(month, DATEDIFF(MONTH, @f, @t), @f), @t) as d, 
DATEDIFF(MONTH, @f, @t) + convert(float, datediff(d, dateadd(month, DATEDIFF(MONTH, @f, @t), @f), @t))/30.0 as md 

Results :

| M | D | MD | 
|---|---|-----| 
| 3 | 3 | 3.1 | 
+0

나는 그것을 시험해 볼 것이다 – vmb

+0

매력처럼 작동 – vmb

1
declare @s datetime, @e datetime 
select @s='2015-01-25 00:00:00.000', @e='2015-04-28 00:00:00.000' 
SELECT ceiling(cast(cast(DATEDIFF(MONTH, @s,@e) as varchar)+'.'+cast(-(DATEPART(dd,@s)-DATEPART(dd, @e)) as varchar) as float)) as Month 

결과 DATEDIFF (MONTH '할 때 기대 값을 무엇

Month 
4 
+0

ok..i 시도해 본다 – vmb

+0

이것은 또한 작동 중이다 – vmb