2013-12-19 124 views
1

請參閱下面的示例,並請讓我知道您的想法。sql server中兩個日期之間的月份差異

declare @EmployeeStartDate datetime='01-Sep-2013' 
declare @EmployeeEndDate datetime='15-Nov-2013' 
select DateDiff(mm,@EmployeeStartDate, DateAdd(mm, 1,@EmployeeEndDate)) 

輸出= 3 預期輸出= 2.5

因爲我只有15天月,所以我應該得到0.5爲十一月

+1

你錯過放置'dd',而不是'MM' –

+0

如果@EmployeeEndDate日期時間= '08 -nov-2013' 會是怎樣的結果預期? – user3014966

+0

它應該是2.2 .... 11月8日(8/30 = 0.2) – Jeswanth

回答

6

試試這個

SELECT CASE WHEN DATEDIFF(d,'2013-09-01', '2013-11-15')>30 THEN DATEDIFF(d,'2013-09-01', '2013-11-15')/30.0 ELSE 0 END AS 'MonthDifference' 

OR

SELECT DATEDIFF(DAY, '2013-09-01', '2013-11-15')/30.436875E 
+0

你有沒有試過? –

1

則DateDiff指定工作列的值進行比較除了這兩個日期並且給你一個確切的區別外。你已經告訴它比較月份值,所以它看起來就是這樣。

http://technet.microsoft.com/en-us/library/ms189794.aspx

TechNet文章詳細介紹了DateDiff函數的返回值 - 注意,這只是INT。

如果你想要的值是一個確切的數字(或nearabouts),你應該在日期的日期,然後除以30.爲整齊,我也四捨五入到一個小數位。

select Round(Convert(decimal, DateDiff(dd,@EmployeeStartDate, @EmployeeEndDate))/30, 1) 
+0

你可以請讓我怎麼得到2.5個月作爲輸出... – Jeswanth

+1

你可以有一個使用datediff(dd,....)/30 –

+0

@GiacomoDegliEsposti謝謝,是的,我正在寫這篇文章,就像你評論的那樣。偉大的思想...... –

1

在這裏你去:

declare @EmployeeStartDate datetime='01-Sep-2013' 
declare @EmployeeEndDate datetime='15-Nov-2013' 

;WITH cDayDiff AS 
(
    select DateDiff(dd,@EmployeeStartDate, DateAdd(dd, 1,@EmployeeEndDate)) as days 
) 
SELECT 
    CAST(days as float)/30 as Months 
FROM 
    cDayDiff 

76天相等於2.5333

輸出:

Months 
============ 
2.53333333333333 
2
select CAST(DATEDIFF(MONTH, StartDate, EndDate) AS float) - 
    (DATEPART(dd,StartDate)*1.0 - 1.0)/DAY(EOMONTH(StartDate)) + 
    ((DATEPART(dd,EndDate)*1.0)/DAY(EOMONTH(EndDate)))