我希望在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函数)有问题。
有什么方法吗?
答案 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
它将开始年份计入结束日并尝试计算天数。然后,如果出现负面影响,它会将起始年份之后的年份计入到开始日期并计算天数。