fecha y hora

13/05/2005 - 18:09 por Alioscha Gonzalo Debali | Informe spam
Hola a todos,

tengo un problema con el manejo de la fecha y hora,

Hay una tabla (bastante grande) que tiene un campo DateTime (donde la fecha
y hora son significativas), pero quiero hacer un Select por un rango de
fecha (donde la parte time no es importate)
y me devuelva todos los registro del período solicitado, El Problema es que
si el campo es 10/01/2005 14:00 y lo pedido es fecha 10/01/2005 no me lo
incluye.

Para lo cual arme una funcion

CREATE FUNCTION [Dbo].[Fn_DtoS] (@dFecha datetime )
RETURNS char(8)
AS
BEGIN
RETURN(select CONVERT ( char(8) , @dFecha,112) )
END

En el select hago select . where dbo.Fn_dtos(dfecha) between
dbo.Fn_dtos(@dfecha1) and dbo.Fn_dtos(@dfecha2)

Me temo que esto no es muy efciente pero para salir del paso funciona.

Comentarios serán agradecidos.

saludos

Preguntas similare

Leer las respuestas

#6 Alioscha Gonzalo Debali
13/05/2005 - 19:40 | Informe spam
Fantastico, gracias

"Alejandro Mesa" escribió en el
mensaje news:
Corrección,

El cambio de ingles a español y viceversa a veces me juega una mala


pasada.

> where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050131')

where dfecha >= '20050101' and dfecha < dateadd(day, 1, '20050131')

> where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050201')

where dfecha >= '20050101' and dfecha < dateadd(day, 1, '20050201')


AMB

"Alejandro Mesa" wrote:

> Alioscha,
>
> > Pero el rango de fecha purde ser mensual (01/01/2005) al (31/01/2005)
>
> Voy usar estos valores para re-escribir el patroon:
>
> select c1, ..., cn
> from tabla 1
> where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050131')
>
> lo cual quedaria como:
>
> select c1, ..., cn
> from tabla 1
> where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050201')
>
> osea, que la columna dfecha sea mayor o igual que 01/01/2005 y menor a
> 02/01/2005
>
>
> AMB
>
> "Alioscha Gonzalo Debali" wrote:
>
> > Gracias por tu rta.
> >
> > Pero el rango de fecha purde ser mensual (01/01/2005) al (31/01/2005)
> >
> > declare @ed , de que tipo es datetime?
> >
> > saludos
> >
> >
> > "Alejandro Mesa" escribió en


el
> > mensaje news:
> > > Alioscha,
> > >
> > > Use el patron:
> > >
> > > declare @sd datetime
> > > declare @ed
> > >
> > > set @sd = '20050110'
> > > set @ed = '20050110'
> > >
> > > select c1, ..., cn
> > > from tabla1
> > > where dfecha >= @sd and dfecha < dateadd(day, 1, @ed)
> > >
> > > Osea, que la columna fecha sea mayor o igual a la fecha de inicio y


menor
> > > que al dia siguiente (12:00 am).
> > >
> > >
> > > AMB
> > >
> > >
> > > "Alioscha Gonzalo Debali" wrote:
> > >
> > > > Hola a todos,
> > > >
> > > > tengo un problema con el manejo de la fecha y hora,
> > > >
> > > > Hay una tabla (bastante grande) que tiene un campo DateTime (donde


la
> > fecha
> > > > y hora son significativas), pero quiero hacer un Select por un


rango de
> > > > fecha (donde la parte time no es importate)
> > > > y me devuelva todos los registro del período solicitado, El


Problema es
> > que
> > > > si el campo es 10/01/2005 14:00 y lo pedido es fecha 10/01/2005 no


me lo
> > > > incluye.
> > > >
> > > > Para lo cual arme una funcion
> > > >
> > > > CREATE FUNCTION [Dbo].[Fn_DtoS] (@dFecha datetime )
> > > > RETURNS char(8)
> > > > AS
> > > > BEGIN
> > > > RETURN(select CONVERT ( char(8) , @dFecha,112) )
> > > > END
> > > >
> > > > En el select hago select . where dbo.Fn_dtos(dfecha) between
> > > > dbo.Fn_dtos(@dfecha1) and dbo.Fn_dtos(@dfecha2)
> > > >
> > > > Me temo que esto no es muy efciente pero para salir del paso


funciona.
> > > >
> > > > Comentarios serán agradecidos.
> > > >
> > > > saludos
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> >
> >
> >
Respuesta Responder a este mensaje
#7 Ody Barrera
14/05/2005 - 02:37 | Informe spam
Hola estimado Alejandro:

Gracias por la ayuda, pero tengo una duda hablas de utilizar un patrón,
entonces pregunto en donde puedo encontrar patrones para SQL Server.

Saludos

Ody Barrera

"Alejandro Mesa" escribió:

Corrección,

El cambio de ingles a español y viceversa a veces me juega una mala pasada.

> where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050131')

where dfecha >= '20050101' and dfecha < dateadd(day, 1, '20050131')

> where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050201')

where dfecha >= '20050101' and dfecha < dateadd(day, 1, '20050201')


AMB

"Alejandro Mesa" wrote:

> Alioscha,
>
> > Pero el rango de fecha purde ser mensual (01/01/2005) al (31/01/2005)
>
> Voy usar estos valores para re-escribir el patroon:
>
> select c1, ..., cn
> from tabla 1
> where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050131')
>
> lo cual quedaria como:
>
> select c1, ..., cn
> from tabla 1
> where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050201')
>
> osea, que la columna dfecha sea mayor o igual que 01/01/2005 y menor a
> 02/01/2005
>
>
> AMB
>
> "Alioscha Gonzalo Debali" wrote:
>
> > Gracias por tu rta.
> >
> > Pero el rango de fecha purde ser mensual (01/01/2005) al (31/01/2005)
> >
> > declare @ed , de que tipo es datetime?
> >
> > saludos
> >
> >
> > "Alejandro Mesa" escribió en el
> > mensaje news:
> > > Alioscha,
> > >
> > > Use el patron:
> > >
> > > declare @sd datetime
> > > declare @ed
> > >
> > > set @sd = '20050110'
> > > set @ed = '20050110'
> > >
> > > select c1, ..., cn
> > > from tabla1
> > > where dfecha >= @sd and dfecha < dateadd(day, 1, @ed)
> > >
> > > Osea, que la columna fecha sea mayor o igual a la fecha de inicio y menor
> > > que al dia siguiente (12:00 am).
> > >
> > >
> > > AMB
> > >
> > >
> > > "Alioscha Gonzalo Debali" wrote:
> > >
> > > > Hola a todos,
> > > >
> > > > tengo un problema con el manejo de la fecha y hora,
> > > >
> > > > Hay una tabla (bastante grande) que tiene un campo DateTime (donde la
> > fecha
> > > > y hora son significativas), pero quiero hacer un Select por un rango de
> > > > fecha (donde la parte time no es importate)
> > > > y me devuelva todos los registro del período solicitado, El Problema es
> > que
> > > > si el campo es 10/01/2005 14:00 y lo pedido es fecha 10/01/2005 no me lo
> > > > incluye.
> > > >
> > > > Para lo cual arme una funcion
> > > >
> > > > CREATE FUNCTION [Dbo].[Fn_DtoS] (@dFecha datetime )
> > > > RETURNS char(8)
> > > > AS
> > > > BEGIN
> > > > RETURN(select CONVERT ( char(8) , @dFecha,112) )
> > > > END
> > > >
> > > > En el select hago select . where dbo.Fn_dtos(dfecha) between
> > > > dbo.Fn_dtos(@dfecha1) and dbo.Fn_dtos(@dfecha2)
> > > >
> > > > Me temo que esto no es muy efciente pero para salir del paso funciona.
> > > >
> > > > Comentarios serán agradecidos.
> > > >
> > > > saludos
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> >
> >
> >
Respuesta Responder a este mensaje
#8 Alejandro Mesa
16/05/2005 - 13:56 | Informe spam
Ody,

Debi haber extendido un poquito mas el comentario. Este patron lo he visto
usar mucho por los programadores de base de datos, y se debe principalmente a
que sql server mezcla fecha y tiempo en un mismo tipo de datos asi como a las
caracteristicas a cumplir por las expresiones que usamos en la clausula
"where" para que estas sean consideradas como argumentos de busqueda.

Ajuste y optimización del rendimiento de MS SQL Server para programadores,
segunda parte: El optimizador de consultas
http://www.microsoft.com/latam/tech...005/art04/


AMB

"Ody Barrera" wrote:

Hola estimado Alejandro:

Gracias por la ayuda, pero tengo una duda hablas de utilizar un patrón,
entonces pregunto en donde puedo encontrar patrones para SQL Server.

Saludos

Ody Barrera

"Alejandro Mesa" escribió:

> Corrección,
>
> El cambio de ingles a español y viceversa a veces me juega una mala pasada.
>
> > where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050131')
>
> where dfecha >= '20050101' and dfecha < dateadd(day, 1, '20050131')
>
> > where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050201')
>
> where dfecha >= '20050101' and dfecha < dateadd(day, 1, '20050201')
>
>
> AMB
>
> "Alejandro Mesa" wrote:
>
> > Alioscha,
> >
> > > Pero el rango de fecha purde ser mensual (01/01/2005) al (31/01/2005)
> >
> > Voy usar estos valores para re-escribir el patroon:
> >
> > select c1, ..., cn
> > from tabla 1
> > where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050131')
> >
> > lo cual quedaria como:
> >
> > select c1, ..., cn
> > from tabla 1
> > where dfecha >= '20050101' y dfecha < dateadd(day, 1, '20050201')
> >
> > osea, que la columna dfecha sea mayor o igual que 01/01/2005 y menor a
> > 02/01/2005
> >
> >
> > AMB
> >
> > "Alioscha Gonzalo Debali" wrote:
> >
> > > Gracias por tu rta.
> > >
> > > Pero el rango de fecha purde ser mensual (01/01/2005) al (31/01/2005)
> > >
> > > declare @ed , de que tipo es datetime?
> > >
> > > saludos
> > >
> > >
> > > "Alejandro Mesa" escribió en el
> > > mensaje news:
> > > > Alioscha,
> > > >
> > > > Use el patron:
> > > >
> > > > declare @sd datetime
> > > > declare @ed
> > > >
> > > > set @sd = '20050110'
> > > > set @ed = '20050110'
> > > >
> > > > select c1, ..., cn
> > > > from tabla1
> > > > where dfecha >= @sd and dfecha < dateadd(day, 1, @ed)
> > > >
> > > > Osea, que la columna fecha sea mayor o igual a la fecha de inicio y menor
> > > > que al dia siguiente (12:00 am).
> > > >
> > > >
> > > > AMB
> > > >
> > > >
> > > > "Alioscha Gonzalo Debali" wrote:
> > > >
> > > > > Hola a todos,
> > > > >
> > > > > tengo un problema con el manejo de la fecha y hora,
> > > > >
> > > > > Hay una tabla (bastante grande) que tiene un campo DateTime (donde la
> > > fecha
> > > > > y hora son significativas), pero quiero hacer un Select por un rango de
> > > > > fecha (donde la parte time no es importate)
> > > > > y me devuelva todos los registro del período solicitado, El Problema es
> > > que
> > > > > si el campo es 10/01/2005 14:00 y lo pedido es fecha 10/01/2005 no me lo
> > > > > incluye.
> > > > >
> > > > > Para lo cual arme una funcion
> > > > >
> > > > > CREATE FUNCTION [Dbo].[Fn_DtoS] (@dFecha datetime )
> > > > > RETURNS char(8)
> > > > > AS
> > > > > BEGIN
> > > > > RETURN(select CONVERT ( char(8) , @dFecha,112) )
> > > > > END
> > > > >
> > > > > En el select hago select . where dbo.Fn_dtos(dfecha) between
> > > > > dbo.Fn_dtos(@dfecha1) and dbo.Fn_dtos(@dfecha2)
> > > > >
> > > > > Me temo que esto no es muy efciente pero para salir del paso funciona.
> > > > >
> > > > > Comentarios serán agradecidos.
> > > > >
> > > > > saludos
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > >
> > >
> > >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida