Función en MySQL para contar días entre dos fechas sin contar sábados ni domingos
Después de darle muchas vueltas he encontrado esta útil función en los foros de MySQL que permite calcular el número de días que han transcurrido entre dos fechas sin contar fines de semana. Espero que os sea tan útil como a mí.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
DELIMITER $$ DROP FUNCTION IF EXISTS `workdaydiff`$$ CREATE FUNCTION workdaydiff(b date, a date) RETURNS int(11) DETERMINISTIC COMMENT 'working day difference for 2 dates' BEGIN DECLARE freedays int; SET freedays = 0; SET @x = DATEDIFF(b, a); IF @x<0 THEN SET @m = a; SET a = b; SET b = @m; SET @m = -1; ELSE SET @m = 1; END IF; SET @x = abs(@x) + 1; SET @w1 = WEEKDAY(a)+1; SET @wx1 = 8-@w1; IF @w1>5 THEN SET @w1 = 0; ELSE SET @w1 = 6-@w1; END IF; SET @wx2 = WEEKDAY(b)+1; SET @w2 = @wx2; IF @w2>5 THEN SET @w2 = 5; END IF; SET @weeks = (@x-@wx1-@wx2)/7; SET @noweekends = (@weeks*5)+@w1+@w2; SET @result = @noweekends-freedays; RETURN @result*@m; END$$ DELIMITER ; |