miércoles, 6 de abril de 2011

[MySQL] Restar fechas con resultado en anios, meses y dias

Les comparto una función que realmente es importante para el calculo de fechas en Mysql.



CREATE FUNCTION `CalculoAnoMesDias`( fecha_ini datetime, fecha_fin datetime ) RETURNS char(128) CHARSET utf8
BEGIN
  /**
    resta de fechas y devuelve anio, mes, dia
    formato de ingreso yyyy-m-d
    SELECT CalculoAnoMesDias( '2011-1-05',now() );
  */
  DECLARE yy,mm,d0,dd BIGINT;
  SET yy = TIMESTAMPDIFF(YEAR,fecha_ini,fecha_fin); -- anios
  SET mm = TIMESTAMPDIFF(MONTH,fecha_ini,fecha_fin) MOD 12; -- meses
  SET d0 = TIMESTAMPDIFF(DAY,fecha_ini,fecha_fin);  -- dias
 

 -- calcular los dias
  IF yy > 0 ||  mm > 0 THEN
       IF (day(fecha_fin) >= day(fecha_ini)) THEN
         SET dd = TIMESTAMPDIFF(DAY,fecha_ini,fecha_fin) - TIMESTAMPDIFF(DAY,fecha_ini,CONCAT(YEAR(fecha_fin),'-',MONTH(fecha_fin),'-',day(fecha_ini)));
        ELSE
         SET dd = TIMESTAMPDIFF(DAY,fecha_ini,fecha_fin) - TIMESTAMPDIFF(DAY,fecha_ini,CONCAT(YEAR(DATE_SUB(fecha_fin,INTERVAL 1 MONTH)),'-',MONTH(DATE_SUB(fecha_fin,INTERVAL 1 MONTH)),'-',day(fecha_ini)));
        END IF;
  ELSE
     SET dd = d0;   
  END IF;
 
  RETURN CONCAT( yy, '  año(s) ,', mm, ' meses ,', dd, ' dias ');
END;

No hay comentarios:

Publicar un comentario