2015-02-23 119 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

相关问题