2014-12-03 59 views
0

我正在面對一個在幾個月中查找確切日期差異的問題。SQL Server中的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') 

如果您使用DateDiff函數,那麼上面的兩個例子將返回相同的值3 即SELECT DATEDIFF(,「2015-01- 00:00:00.000','2015-04- 00:00:00.000')爲3. 但我需要的結果大於3

如何使用單個選擇查詢來實現上述要求。

+0

做的時候'DATEDIFF(MONTH什麼是預期值, '2015年1月25日00:00:00.000',「2015年-04-26 00:00:00.000')'?你想要它成爲'3.xx'嗎? – ekad 2014-12-03 05:02:25

+0

yes..i需要這樣的輸出 – vmb 2014-12-03 05:04:47

+0

@ekad ..即使返回值爲4,我也可以。 – vmb 2014-12-03 05:17:27

回答

2

你需要計算個月,然後你需要提前數個月的數量開始日期和計算的日子裏,像這樣的:

SQL Fiddle

MS SQL Server 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 2014-12-03 05:44:11

+0

它的作品像一個魅力 – vmb 2014-12-03 06:18:22

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 

結果

Month 
4 
+0

行..我會試試 – vmb 2014-12-03 05:44:38

+0

這也是工作 – vmb 2014-12-03 06:17:44