Función para el Cálculo de Días Laborables en Transact-SQL
Escenario
Para análisis estadísticos es necesario implementar en T-SQL de MS SQL 2000 una función para el cálculo de días laborables entre dos fechas.
Se consideran días Laborables de Lunes a Viernes (de ahora en adelante DIA.LAB) y Fin de Semana Sábado y Domingo (de ahora en adelante FinDe)
Procedimiento
Definimos una función en T-SQL para contabilizar los días laborables atendiendo a los siguientes casos:
- Acceder al servidor MS SQL 2000 con permisos necesarios al menos para ejecutar CREATE FUNCTION
- Comprobamos que el primer día de la semana es lunes, para ello ejecutamos select @@DATEFIRST el valor debe ser 1
- Definimos una función atendiendo a los siguientes casos:
- Fecha Inicio y Fecha Fin en FinDe
- Fecha Inicio DIA.LAB y Fecha Fin FinDe
- Fecha Inicio FinDe y Fecha Fin en FinDe
- Fecha Inicio y Fecha Fin en DIA.LAB
Utilizamos el siguiente código
|
CREATE function fBusinessDays (@start datetime, @end datetime) DECLARE @wks as int, @LabDays as int — Cálculo de Semanas /* Primero calculamos las semanas entre 2 fechas atendiendo a los siguientes casos:
*/ SET @wks = CASE /* Primero calculamos el número de días DIA.LAB en función de los siguientes casos:
*/
SET @LabDays = return( @LabDays) |
Enlaces de Interés
Para consultar el manejo del lenguaje consultar Transact-SQL Reference

excelete dato
funciona OK
gracias
etragu dijo esto en Martes, 24 junio 2008 a 14:29 |
Lo hice algo parecido…
set datefirst 7
declare @ini date
declare @fin date
set @ini = ’2011-01-30′
set @fin = ’2011-02-12′
select
[Días totales] = datediff ( day, @ini, @fin ) + 1,
[Días laborales] =
( datediff ( week, dateadd ( day, – datepart ( weekday, @ini ) + 1, @ini ), dateadd ( day, 7 – datepart ( weekday, @fin ), @fin ) ) + 1 ) * 5 -
( case when datepart ( weekday, @ini ) = 1 then 0 else datepart ( weekday, @ini ) – 2 end +
case when datepart ( weekday, @fin ) = 7 then 0 else 6 – datepart ( weekday, @fin ) end
)
¡Saludos!
zluis0 dijo esto en Sábado, 26 febrero 2011 a 0:34 |