获取两个日期之间不包括年份的天数

时间:2015-02-23 17:28:42

标签: mysql

我希望在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(或至少是dayofyear函数)有问题。

有什么方法吗?

2 个答案:

答案 0 :(得分: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日之间的总天数与总天数。

答案 1 :(得分: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

它将开始年份计入结束日并尝试计算天数。然后,如果出现负面影响,它会将起始年份之后的年份计入到开始日期并计算天数。