Dias laborables entre 2 fechas
Publicado por Pablo (5 intervenciones) el 18/11/2010 21:39:57
Estimados Amigos
Tengo ahora el siguiente problema, tengo que hallar los dias laborables (que no cuente sabados ni domingos) entre un rango de fechas (fecha_inicio y fecha_fin), he probado con esta funcion que encontre en internet pero siempre me devuelve NULL
la ejecuto de la siguiente manera
select dbo.DiasLaborales(fechaini, fechafin) from vacaciones
Que puede estar mal en esta funcion, o si hay alguna manera mas sencilla de poder encontrar los dias laborales.
Saludos
Pablo
Tengo ahora el siguiente problema, tengo que hallar los dias laborables (que no cuente sabados ni domingos) entre un rango de fechas (fecha_inicio y fecha_fin), he probado con esta funcion que encontre en internet pero siempre me devuelve NULL
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
45
46
47
48
49
CREATE FUNCTION dbo.DiasLaborales
( @StartDate datetime,
@EndDate datetime )
RETURNS INT
AS
BEGIN
DECLARE @WorkDays int, @FirstPart int
DECLARE @FirstNum int, @TotalDays int
DECLARE @LastNum int, @LastPart int
IF (DATEDIFF(day, @StartDate, @EndDate) < 2)
BEGIN
RETURN ( 0 )
END
SELECT
@TotalDays = DATEDIFF(day, @StartDate, @EndDate) - 1,
@FirstPart = CASE DATENAME(weekday, @StartDate)
WHEN 'Sunday' THEN 6
WHEN 'Monday' THEN 5
WHEN 'Tuesday' THEN 4
WHEN 'Wednesday' THEN 3
WHEN 'Thursday' THEN 2
WHEN 'Friday' THEN 1
WHEN 'Saturday' THEN 0
END,
@FirstNum = CASE DATENAME(weekday, @StartDate)
WHEN 'Sunday' THEN 5
WHEN 'Monday' THEN 4
WHEN 'Tuesday' THEN 3
WHEN 'Wednesday' THEN 2
WHEN 'Thursday' THEN 1
WHEN 'Friday' THEN 0
WHEN 'Saturday' THEN 0
END
IF (@TotalDays < @FirstPart)
BEGIN
SELECT @WorkDays = @TotalDays
END
ELSE
BEGIN
SELECT @WorkDays = (@TotalDays - @FirstPart) / 7
SELECT @LastPart = (@TotalDays - @FirstPart) % 7
SELECT @LastNum = CASE
WHEN (@LastPart < 7) AND (@LastPart > 0) THEN @LastPart - 1
ELSE 0
END
SELECT @WorkDays = @WorkDays * 5 + @FirstNum + @LastNum
END
RETURN ( @WorkDays +1)
END
la ejecuto de la siguiente manera
select dbo.DiasLaborales(fechaini, fechafin) from vacaciones
Que puede estar mal en esta funcion, o si hay alguna manera mas sencilla de poder encontrar los dias laborales.
Saludos
Pablo
Valora esta pregunta


0