Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Promoción de webs | Rentabilidad de webs
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Función en SQL para el cálculo de días laborables


Función que nos permite calcular el número de días laborables entre una fecha y otra, con las validaciones pertinentes.


/*Primeramente declaramos que vamos a crear una funcion, en este caso se llama Dif Dias y recibe dos parámetros, la fecha inicial del período y la final*/

CREATE FUNCTION DifDias(@StartDate DATETIME,@EndDate DATETIME)
RETURNS integer
AS
Begin

//Con esta variable calculamos cuantos dias "normales" hay en el rango de fechas

DECLARE @DaysBetween INT

//Con esta variable acumulamos los dias totales

DECLARE @BusinessDays INT

//esta variable nos sirve de contador para saber cuando lleguemos al ultimo dia del rango

DECLARE @Cnt INT

/*esta variable es la que comparamos para saber si el dia que esta calculando es sábado o domingo*/

DECLARE @EvalDate DATETIME

/*Esta par de variables sirven para comparar las dos fechas, si son iguales, la funcion nos regresa un 0*/

DECLARE @ini VARCHAR(10)
DECLARE @fin VARCHAR(10)

//Inicializamos algunas variables

SELECT @DaysBetween = 0
SELECT @BusinessDays = 0
SELECT @Cnt=0

//Calculamos cuantos dias normales hay en el rango de fechas

SELECT @DaysBetween = DATEDIFF(DAY,@StartDate,@EndDate) + 1

/*Ordenamos el formato de las fechas para que no importando como se proporcionen se comparen igual*/

SELECT @ini = (SELECT CAST((CAST(datepart(dd,@StartDate)AS
VARCHAR(2))+'/'+ CAST(datepart(mm,@StartDate)AS
VARCHAR(2))+'/'+CAST(datepart(yy,@StartDate)AS VARCHAR(4))) as
varchar(10)))
SELECT @fin = (SELECT CAST((CAST(datepart(dd,@EndDate)AS
VARCHAR(2))+'/'+ CAST(datepart(mm,@EndDate)AS VARCHAR(2))+'/'+
CAST(datepart(yy,@EndDate)AS VARCHAR(4)))as varchar(10)))

//Se comparan las dos fechas

IF @ini <>@fin
BEGIN

/*Si la diferencia de fechas es igual a dos, es porque solo ha transcurrido un dia, asi que solo se valida que no vaya a marcar dias de mas*/

IF @DaysBetween = 2
BEGIN
SELECT @BusinessDays = 1
END
ELSE
BEGIN
WHILE @Cnt < @DaysBetween
BEGIN

/*Se Iguala la fecha a que vamos a calcular para saber si es sabado o domingo en la variable @EvalDate sumandole los dias que marque el contador, el cual no debe ser mayor que el numero total de dias que hay en el rango de fechas*/

SELECT @EvalDate = @StartDate + @Cnt

/*Utilizando la funcion datepart con el parametro dw que calcula que dia de la semana corresponde una fecha determinada, determinados que no sea sabado (7) o domingo (1)*/

IF ((datepart(dw,@EvalDate) <> 1) and
(datepart(dw,@EvalDate) <> 7) )
BEGIN

/*Si no es sabado o domingo, entonces se suma uno al total de dias que queremos desplegar*/

SELECT @BusinessDays = @BusinessDays + 1
END

//Se suma un dia mas al contador

SELECT @Cnt = @Cnt + 1
END
END
END
ELSE
BEGIN

//Si fuese cierto que las fechas eran iguales se despliegue cero

SELECT @BusinessDays = 0
END

//Al finalizar el ciclo, la funcion regresa el numero total de dias

return (@BusinessDays)
END

 Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada
+ 2 comentarios (Añadir)
+ 5 comentarios no revisados

 Autoría, licencia y acciones sobre este artículo

Informe de Rosendo Lopez Robles*

Atención: Copyright. Este artículo no se puede reproducir sin la autorización expresa del autor.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Tutorial de SQL
Siguiente: SQL con Oracle

Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en Lenguaje SQL


 Comentarios de los visitantes
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
Se muestran 2 comentarios revisados

 Comentario de Tomas Ochoa
05/5/05 
Excelente Funcion !!!!!!!, Me sirvio mucho gracias

 Comentario de luis
04/1/07 
supongo que es muy interesante, pero vengo leyendome el tutorial desde el principio y da un salto enorme desde el anterior articulo a este, no me he enterado ni del 10% de lo que se explica, sin embargo los anteriores estupendos. esperemos que los siguientes sean mejores...

Añadir un comentario al artículo Añadir un comentario del artículo
 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 5 comentarios sin revisar

Ver el comentario no revisadoVer los comentarios no revisados
Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Tutorial de SQL
Categorías
+Lenguaje SQL

Lectura recomendada

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia