Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Validar Hora (https://www.clubdelphi.com/foros/showthread.php?t=83264)

Cristhor1982 28-05-2013 15:19:00

Validar Hora
 
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:
Código SQL [-]
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:

Código SQL [-]
  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

Cita:

Empezado por ecfisa (Mensaje 461391)
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:
Código SQL [-]
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

Cita:

Empezado por Cristhor1982 (Mensaje 461393)
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:
Código SQL [-]
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)

Código SQL [-]
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)))
Cita:

Empezado por ecfisa (Mensaje 461399)
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:
Código SQL [-]
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. :)


La franja horaria es GMT +2. Ahora son las 00:27:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi