2015-02-23 128 views
2

我想要在MySql中獲取兩個日期之間忽略年份的天數。獲取兩個日期之間不包含年份的天數

我正在使用以下查詢,當日期間隔超過一年時,它可以正常工作。

select dayofyear(from_days((to_days('2015-11-20') - to_days('2014-11-15')))) 

select dayofyear(from_days((to_days('2019-11-20') - to_days('2014-11-15')))) 

正確都返回5

然而,當這兩個日期都在同一年

select dayofyear(from_days((to_days('2014-11-20') - to_days('2014-11-15')))) 

這個返回0。我想這是因爲MySQL在年內有日期的問題少超過100(或至少是一天的功能)。

有沒有辦法解決這個問題?

+1

請更新您的問題以指定您想要在閏年發生的事情。 2012-02-27和2013-03-01之間所需的天數是多少? 2012-02-27和2012-03-01之間的天數如何? 2013-02-27和2017-03-01之間怎麼樣? – 2015-02-23 17:47:03

+0

包裹怎麼樣? 2015-02-23到2016-02-22你想要什麼? 2015-02-23到2016-02-23怎麼樣? – 2015-02-23 17:49:20

+0

我希望它返回兩個日期之間的天數。所以如果7年34天我想要34. – 2015-02-23 18:15:20

回答

1

如果您不願意指定閏年發生的事情,那麼您不得不猜測。

我認爲這有效。 http://sqlfiddle.com/#!2/043543/1/0

IF(timestampdiff(DAY, st, str_to_date(concat_ws('-',YEAR(st),MONTH(fi), DAY(fi)),'%Y-%m-%d')) >= 0, 
    timestampdiff(DAY, st, str_to_date(concat_ws('-',YEAR(st),MONTH(fi), DAY(fi)),'%Y-%m-%d')), 
    timestampdiff(DAY, st, str_to_date(concat_ws('-',YEAR(st)+1,MONTH(fi), DAY(fi)),'%Y-%m-%d'))) delta 

它大頭針起始年到結束日期,並試圖計算天數。然後,如果出現負值,則在起始年度之後的一年到達開始日期並計算天數。

1

你是這個問題複雜化爲空;

在MySQL中有一個DATEDIFF函數允許你這樣做。

SELECT DATEDIFF('2006-04-03','2006-04-01'); 

這將返回2(天)。

要得到的結果無論一年的,再申請%365

編輯:如果你想獲得考慮閏年的天確切數量,你可以到。減去的天數,天都在每年1月1日(或任何其他日期)的數量:

SELECT DATEDIFF('2006-04-03','2006-04-01') - DATEDIFF(concat(year(yourDate), '01-01'), concat(year(yourDate2), '01-01')); 

這將每年的1月1日之間的天數總要。減去的總天數。

+2

不是每年都有365天! – 2015-02-23 17:40:22

+0

我知道,但你的要求應該是不分年份。 – 2015-02-23 17:41:39

+0

沒有我想要的天數26年和101天我想要101 – 2015-02-23 18:21:49

相關問題