我需要計算兩個日期之間的年份差異。真實年份datediff(無年份)
使用DATEDIFF但僅做日期的更小,例如嘗試:
Date 1: 07/03/2011
Date 2: 07/02/2012
(Date format MM/DD/YYYY)
然後:DATEDIFF([YYYY],'07/03/2011' ,'07/02/2012' )= 1
但真正的差異是0年。
我需要計算兩個日期之間的年份差異。真實年份datediff(無年份)
使用DATEDIFF但僅做日期的更小,例如嘗試:
Date 1: 07/03/2011
Date 2: 07/02/2012
(Date format MM/DD/YYYY)
然後:DATEDIFF([YYYY],'07/03/2011' ,'07/02/2012' )= 1
但真正的差異是0年。
由於沒有人有正確的解決方案,我張貼我的,即使沒有人會通知。
declare @d1 datetime
declare @d2 datetime
set @d1 = '1968-02-29'
set @d2 = '2011-02-28'
select datediff(year, @d1, @d2)-
case when month(@d1)*32 + day(@d1) > month(@d2) * 32 + day(@d2) then 1 else 0 end
--case when month(@d2)*32 + day(@d1) > month(@d2) * 32 + day(@d2) then 1 else 0 end
這種方法基本上是一樣的下一個方法,不同的是它是用數字做是爲了避免鑄造,我被告知要慢。
select datediff(year, @d1, @d2)-
case when convert(char(5),@d1, 1) > convert(char(5),@d2, 1) then 1 else 0 end
在回顧了更多的問題和答案之後,我所提供的只是一些聯繫:http://msdn.microsoft.com/en-us/library/ms189794.aspx。
是啊,DATEDIFF
就是這樣用所有的日期部件工作,所以我猜你應該計算天數差,然後除以365(如果你不關心一天的時間)。 Si,試試這個:
DECLARE @StartDate DATETIME, @EndDate DATETIME
SET @StarDate= '20110307'
SET @EndDate = '20120207'
SELECT DATEDIFF(DAY,@StartDate, @EndDate)/365
如果您指定[yyyy]
,SQL Server只會執行一年差異。
對於DATEDIFF([yyyy], '07/03/2011', '12/31/2011')
它將返回零。
對於DATEDIFF([yyyy], '07/03/2011', '01/01/2012')
它將返回1.
在你的情況,如果你正在尋找365天或366天,你應該算日子:
DATEDIFF([dd], '07/03/2011', '07/02/2012')/366
越多年過去了,越不準確,因爲它一直持續366天,而一年可能有365/366 – RichardTheKiwi 2011-02-14 19:00:50
當然,這就是爲什麼我曾說過「365或366」。如果您查看修訂歷史記錄,則可以看到它是365.然後,我將其更改爲JMira的示例數據的具體內容。我可以使用條件語句等提供完整的解決方案,但沒有時間... – 2011-02-14 19:48:19
這應該工作
declare @date1 datetime
declare @date2 datetime
select @date1 = '20110703', @date2 = '20120703'
select case
when dateadd(yy, DATEDIFF(yy, @date1, @date2), @date1) > @date2
then DATEDIFF(yy, @date1, @date2) -1
else DATEDIFF(yy, @date1, @date2) end
顯示許多邊緣條件的更全面的測試案例
create table dates(id int identity, date1 datetime, date2 datetime)
insert dates select '20110703', '20120703'
insert dates select '20110703', '20120702'
insert dates select '20110702', '20120703'
insert dates select '20110228', '20120228'
insert dates select '20120229', '20130228'
insert dates select '20120229', '20130301'
insert dates select '20110301', '20120229'
insert dates select '20120229', '20160301'
insert dates select '20120229', '20160229'
insert dates select '201', '20110101'
insert dates select '20100101', '20111231'
select date1, date2,
case
when dateadd(yy, DATEDIFF(yy, date1, date2), date1) > date2
then DATEDIFF(yy, date1, date2) -1
else DATEDIFF(yy, date1, date2) end
from dates
order by id
他會先確定一年中的天數。按照他的例子,2012年,365將無法工作。此外,他需要檢查他的包含日期是否包括閏年的2月29日。 – Matthew 2011-02-14 17:57:24
不正確 - 結束2012-03-06,開始2011年3月7日結果= 1 – RichardTheKiwi 2011-02-14 19:03:36