sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo obtener la diferencia en años de dos fechas diferentes?

Esta es la expresión que también incluye los años bisiestos:

YEAR(date1) - YEAR(date2) - (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d'))

Esto funciona porque la expresión (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d')) es true si fecha1 es "anterior en el año" que fecha2 y porque en mysql, true = 1 y false = 0 , por lo que el ajuste es simplemente una cuestión de restar la "verdad" de la comparación.

Esto da los valores correctos para sus casos de prueba, excepto para la prueba n.º 3:creo que debería ser "3" para ser coherente con la prueba n.º 1:

create table so7749639 (date1 date, date2 date);
insert into so7749639 values
('2011-07-20', '2011-07-18'),
('2011-07-20', '2010-07-20'),
('2011-06-15', '2008-04-11'),
('2011-06-11', '2001-10-11'),
('2007-07-20', '2004-07-20');
select date1, date2,
YEAR(date1) - YEAR(date2)
    - (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d')) as diff_years
from so7749639;

Salida:

+------------+------------+------------+
| date1      | date2      | diff_years |
+------------+------------+------------+
| 2011-07-20 | 2011-07-18 |          0 |
| 2011-07-20 | 2010-07-20 |          1 |
| 2011-06-15 | 2008-04-11 |          3 |
| 2011-06-11 | 2001-10-11 |          9 |
| 2007-07-20 | 2004-07-20 |          3 |
+------------+------------+------------+

Ver SQLFiddle