PDA

Ver la Versión Completa : Validar Hora


Cristhor1982
28-05-2013, 15:19:00
Hola amigos, necesito una pequeña ayuda, les comento tengo una tabla que tiene el campo FECHA_HORA varchar(50),
que me entrega este valor:

23-may-2013 11:49:11 CLT

y desde Delphi le envio con un datetimepicker, la fecha y concateno con un tedit Queda algo asi 28/05/2013 08:50

ahora bien estoy tratando de hacer un filtro de las fechas, pero no se me ocurre como?, alguna sugerencia

Saludos

ecfisa
28-05-2013, 16:06:29
Hola Cristhor1982.

Nos das pocos datos como para ser muy específicos...

Dependiendo de el RDBMS que estes usando la sintáxis va a variar, pero podes hacer el filtrado desde una consulta.

Tomando en cuenta que para que el campo FECHA_HORA sea un valor de fecha válido nos "molestan" los últimos caracteres, en Firebird se podría hacer:

SELECT *
FROM TU_TABLA
WHERE CAST(SUBSTRING(FECHA_HORA FROM 1 FOR CHAR_LENGTH(FECHA_HORA)-4) AS TIMESTAMP)
BETWEEN :DESDE AND :HASTA


Saludos. :)

Cristhor1982
28-05-2013, 16:17:52
Hola Ecfisa

Gracias por responder tan rapida, mi a continuacion te muestro mi consulta:

SELECT a.N_Maquina,b.Maquina,a.Horometro,a.Cod_Operador,c.Trabajador,a.Cod_Cancha,d.cancha,a.Cod_Insumo,e.D escripCorta,a.Cantidad , NroReferencia,
CASE
WHEN Importado = '1' then 'Importado'
WHEN Importado = '0' then 'No Importado'
ELSE ''
END AS Estado,
FechaHora=convert(datetime,(substring(a.fecha_hora,0,21)),103)
FROM SCGT_TempGE a, Maquinas b,Trabajadores c, Canchas d, Exit_Articulos e
WHERE a.N_Maquina= b.N_Maquina
and a.cod_Operador = c.Cod_Trabajador
and a.Cod_Cancha = d.Cod_Cancha
and a.Cod_Insumo = e.CodigoArticulo
and ((@xfecha = '') OR (@xfecha <> '' And Fecha_Hora Between @Fecha_Hora+' '+'CLT' And @xFecha+' '+'CLT'))
and ((@xmaquina = '') OR (@xmaquina <> '' And a.N_Maquina = @xMaquina))
and ((@xcancha = '') OR (@xCancha <> '' And a.Cod_Cancha = @xCancha))


El que filtra abajo XFecha= Lleva 22/05/2013 09:49 lo estaba tratando de solucionar concatenando 'CLT', pero que pasara cuando cambie :S

ES SQL 2000 Y Delphi

Saludos

Hola Cristhor1982.

Nos das pocos datos como para ser muy específicos...

Dependiendo de el RDBMS que estes usando la sintáxis va a variar, pero podes hacer el filtrado desde una consulta.

Tomando en cuenta que para que el campo FECHA_HORA sea un valor de fecha válido nos "molestan" los últimos caracteres, en Firebird se podría hacer:

SELECT *
FROM TU_TABLA
WHERE CAST(SUBSTRING(FECHA_HORA FROM 1 FOR CHAR_LENGTH(FECHA_HORA)-4) AS TIMESTAMP)
BETWEEN :DESDE AND :HASTA


Saludos. :)

ecfisa
28-05-2013, 17:41:38
El que filtra abajo XFecha= Lleva 22/05/2013 09:49 lo estaba tratando de solucionar concatenando 'CLT', pero que pasara cuando cambie :S

ES SQL 2000 Y Delphi


Hola Cristhor1982.

Según veo ahora, sólo se evalúan los primeros 23 caracteres del campo ("23-may-2013 11:49:11 CLT"). Y si los últimos tres caracteres podrían variar, los podrías pasar mediante un parámetro, por ejemplo:

SELECT *
FROM TU_TABLA
WHERE CAST(SUBSTRING(FECHA_HORA, 0, 19) AS DATETIME) BETWEEN :DESDE AND :HASTA
AND SUBSTRING(FECHA_HORA, 22, 3) = :PEXT

Pero sinceramente todavía no estoy seguro de haber entendido que es lo que buscas hacer...

Saludos. :)

Cristhor1982
28-05-2013, 18:34:22
De esto no se que puede estar mal, segun yo esta ok...brrr
declare @fecha_hora varchar(20) ,
@xfecha varchar(20)

@Fecha_Hora= '20/05/2013 00:00' --fecha inicio
@xFecha='20/05/2013 23:59' --fecha termino

y el campo FECHA_HORA es un varchar que me entrega = '20-may-2013 23:40:11 CLT' (varchar de 50)

and ((@Fecha_Hora = '') OR (@Fecha_Hora <> '' And convert(datetime,(substring(a.fecha_hora,0,18)),103) Between convert(datetime,(substring(@fecha_hora,0,18)),103) And convert(datetime,(substring(@xFecha,0,18)),103)))
Hola Cristhor1982.

Según veo ahora, sólo se evalúan los primeros 23 caracteres del campo ("23-may-2013 11:49:11 CLT"). Y si los últimos tres caracteres podrían variar, los podrías pasar mediante un parámetro, por ejemplo:

SELECT *
FROM TU_TABLA
WHERE CAST(SUBSTRING(FECHA_HORA, 0, 19) AS DATETIME) BETWEEN :DESDE AND :HASTA
AND SUBSTRING(FECHA_HORA, 22, 3) = :PEXT

Pero sinceramente todavía no estoy seguro de haber entendido que es lo que buscas hacer...

Saludos. :)

Cristhor1982
28-05-2013, 19:44:27
Esta ultima consulta estaba ok, solo que desde delphi no traia valores....brrrr en algun lado limpiaba la variable y trataba de convertir ' ', en datetime, lo bueno es que resulto

transformando el campo FECHA_HORA con datetime y recortando con substring

y luego las variables del proc alm lo mismo

Era solo eso....estuve toda la mañana buscando un pequeño error!!!!:mad:

Gracias Ecfisa,

Saludos

ecfisa
28-05-2013, 20:50:46
Me alegra mucho que lo hayas solucionado :) ^\||/

Saludos. :)