como calcular la diferencia de tiempo entre dos fechas pero ignora

13/04/2006 - 05:07 por IvanRuiz | Informe spam
Hola a todos, espero alguien pueda ayudarme

He estado dando vueltas en como podria hacer para obtener la diferencia
entre dos fechas pero sin considerar cierto periodo de tiempo(horas habiles)

Es decir
04/12/2006 8:00:00 A.M
04/15/2006 10:00:00 A.M

Como obtener la diferencia entre esas dos fechas pero considerando solamente
horas habiles (de 8 Am a 5 Pm por ejemplo)

Esto deseo lograrlo pero con Funciones de SQL Server no iterando entre
registros

Saludos cordiales, espero alguien pueda ayudarme.

Ivan Ruiz

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
13/04/2006 - 14:53 | Informe spam
Ivan,

Veamos si esto te sirve de algo.

use northwind
go

declare @sd datetime
declare @ed datetime
declare @i int

set @sd = '2006-04-12T08:10:05'
set @ed = '2006-04-15T10:20:00'
Set @i = datediff(second, @sd, convert(char(10), @sd, 126) +
'T17:00:00.000') + ((datediff(day, @sd, @ed) - 1) * (8 * 60 * 60)) +
datediff(second, convert(char(10), @ed, 126) + 'T08:00:00.000', @ed)

select
@i as diferencia_en_segundos,
@i / 3600 as horas,
(@i % 3600) / 60 as minutos,
(@i % 3600) % 60 as segundos
go


Diferencia en segundos desde las @sd hasta las 5:00 pm del primer dia


Diferencia en segundos desde las 8 de la mañana hasta las @ed del ultimo dia


Numero de dias entre ambas fechas, sin tomar en cuanta el primer y ultimo
dia. Esto lo multiplicamos por la cantidad de segundos que tiene 8 horas.


AMB


"IvanRuiz" wrote:

Hola a todos, espero alguien pueda ayudarme

He estado dando vueltas en como podria hacer para obtener la diferencia
entre dos fechas pero sin considerar cierto periodo de tiempo(horas habiles)

Es decir
04/12/2006 8:00:00 A.M
04/15/2006 10:00:00 A.M

Como obtener la diferencia entre esas dos fechas pero considerando solamente
horas habiles (de 8 Am a 5 Pm por ejemplo)

Esto deseo lograrlo pero con Funciones de SQL Server no iterando entre
registros

Saludos cordiales, espero alguien pueda ayudarme.

Ivan Ruiz


Respuesta Responder a este mensaje
#2 IvanRuiz
19/04/2006 - 07:23 | Informe spam
Alejandro, Agradesco tu colaboracion, es exactamente lo que necesitaba, sin
embargo me surgio un problema mas.
Como podria hacer exactamente lo que hace la funcion actual que me
proporcionaste pero ahora tambien considerando dias habiles, es decir de
lunes a viernes y/o excluyendo cualquier otro dia festivo (es entendible que
los dias festivos deberan de de indicarse de alguna manera).

Creo que quizas estoy pidiendo Mucho,pero seria genial lograr esto con
funciones de SQL Server.

Espero puedas ayudarme realmente tengo Poca experiencia con SQL Server

"Alejandro Mesa" escribió:

Ivan,

Veamos si esto te sirve de algo.

use northwind
go

declare @sd datetime
declare @ed datetime
declare @i int

set @sd = '2006-04-12T08:10:05'
set @ed = '2006-04-15T10:20:00'
Set @i = datediff(second, @sd, convert(char(10), @sd, 126) +
'T17:00:00.000') + ((datediff(day, @sd, @ed) - 1) * (8 * 60 * 60)) +
datediff(second, convert(char(10), @ed, 126) + 'T08:00:00.000', @ed)

select
@i as diferencia_en_segundos,
@i / 3600 as horas,
(@i % 3600) / 60 as minutos,
(@i % 3600) % 60 as segundos
go


Diferencia en segundos desde las @sd hasta las 5:00 pm del primer dia


Diferencia en segundos desde las 8 de la mañana hasta las @ed del ultimo dia


Numero de dias entre ambas fechas, sin tomar en cuanta el primer y ultimo
dia. Esto lo multiplicamos por la cantidad de segundos que tiene 8 horas.


AMB


"IvanRuiz" wrote:

> Hola a todos, espero alguien pueda ayudarme
>
> He estado dando vueltas en como podria hacer para obtener la diferencia
> entre dos fechas pero sin considerar cierto periodo de tiempo(horas habiles)
>
> Es decir
> 04/12/2006 8:00:00 A.M
> 04/15/2006 10:00:00 A.M
>
> Como obtener la diferencia entre esas dos fechas pero considerando solamente
> horas habiles (de 8 Am a 5 Pm por ejemplo)
>
> Esto deseo lograrlo pero con Funciones de SQL Server no iterando entre
> registros
>
> Saludos cordiales, espero alguien pueda ayudarme.
>
> Ivan Ruiz
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
22/04/2006 - 20:38 | Informe spam
laIvan,

Una manera practica de lograr lo que quieres es usar una tabla calendario.

Why should I consider using an auxiliary calendar table
http://www.aspfaq.com/show.asp?id%19

Supongamos que tienes una tabla donde almacenas la entrada y salida del
empleado. Entonces puedes crear una funcion para que calcule los segundos de
acuerdo a la respuesta que di anteriormente y usas la tabla calendario para
verificar que solo se calcule para los dias habiles.

select dbo.ufn_segundos_habiles(a.sd, a.ed) as segundos_habiles
from dbo.t1 as a
where exists (
select *
from dbo.calendar as c
where c.dt >= a.sd and c.dt < dateadd(day, 1, convert(char(8), a.sd, 112))
and c.isWeekday = 1 and c.isHoliday = 0
)
go


AMB

"IvanRuiz" wrote:

Alejandro, Agradesco tu colaboracion, es exactamente lo que necesitaba, sin
embargo me surgio un problema mas.
Como podria hacer exactamente lo que hace la funcion actual que me
proporcionaste pero ahora tambien considerando dias habiles, es decir de
lunes a viernes y/o excluyendo cualquier otro dia festivo (es entendible que
los dias festivos deberan de de indicarse de alguna manera).

Creo que quizas estoy pidiendo Mucho,pero seria genial lograr esto con
funciones de SQL Server.

Espero puedas ayudarme realmente tengo Poca experiencia con SQL Server

"Alejandro Mesa" escribió:

> Ivan,
>
> Veamos si esto te sirve de algo.
>
> use northwind
> go
>
> declare @sd datetime
> declare @ed datetime
> declare @i int
>
> set @sd = '2006-04-12T08:10:05'
> set @ed = '2006-04-15T10:20:00'
> Set @i = datediff(second, @sd, convert(char(10), @sd, 126) +
> 'T17:00:00.000') + ((datediff(day, @sd, @ed) - 1) * (8 * 60 * 60)) +
> datediff(second, convert(char(10), @ed, 126) + 'T08:00:00.000', @ed)
>
> select
> @i as diferencia_en_segundos,
> @i / 3600 as horas,
> (@i % 3600) / 60 as minutos,
> (@i % 3600) % 60 as segundos
> go
>
>
> Diferencia en segundos desde las @sd hasta las 5:00 pm del primer dia
>
>
> Diferencia en segundos desde las 8 de la mañana hasta las @ed del ultimo dia
>
>
> Numero de dias entre ambas fechas, sin tomar en cuanta el primer y ultimo
> dia. Esto lo multiplicamos por la cantidad de segundos que tiene 8 horas.
>
>
> AMB
>
>
> "IvanRuiz" wrote:
>
> > Hola a todos, espero alguien pueda ayudarme
> >
> > He estado dando vueltas en como podria hacer para obtener la diferencia
> > entre dos fechas pero sin considerar cierto periodo de tiempo(horas habiles)
> >
> > Es decir
> > 04/12/2006 8:00:00 A.M
> > 04/15/2006 10:00:00 A.M
> >
> > Como obtener la diferencia entre esas dos fechas pero considerando solamente
> > horas habiles (de 8 Am a 5 Pm por ejemplo)
> >
> > Esto deseo lograrlo pero con Funciones de SQL Server no iterando entre
> > registros
> >
> > Saludos cordiales, espero alguien pueda ayudarme.
> >
> > Ivan Ruiz
> >
> >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida