Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Cómo concatenar fecha y hora (https://www.clubdelphi.com/foros/showthread.php?t=84155)

GustavoCruz 15-09-2013 22:43:38

Cómo concatenar fecha y hora
 
Hola amigos del foro. tengo una tabla con dos campos (fecha y hora). y necesito hacer una consulta que tomo la fecha y hora juntas...

yo hago esta consulta
Código SQL [-]
select n.*, n.fecha||' '||n.hora from notaenfermeria n
el campo resultante me muestra el siguiente dato 2013-09-10 10:11:00.0000, Cómo hago para que al unir estos dos campos el resultados se igual a "2013-09-10 10:11:00" o "2013-09-10 10:11"

Gracias por vuestra ayuda

GustavoCruz

ecfisa 16-09-2013 05:10:03

Hola Gustavo.

Código SQL [-]
SELECT N.*,
       N.FECHA || ' ' || SUBSTRING(N.HORA FROM 1 FOR 5) AS FECHA_HORA
FROM NOTAENFERMERIA N

Saludos :)

GustavoCruz 16-09-2013 06:18:05

Hola ecfisa, gracias por tu respuesta, pero ahora me surge otro problema y es que necesito consultar por este campo; como en la selección me dio lo que necesitaba pensé que en la parte del where sería lo mismo y no es posible; estoy tratando de esta manera
Código SQL [-]
select n.*
from  liquidos n
where n.fecha||' '||n.hora between cast(:fecha1 as timestamp) and cast(:fecha2 as timestamp)
order by n.fecha, n.hora
pero no me arroja ningún resultado.

Gracias por tu ayuda


Gustavo Cruz

ecfisa 16-09-2013 06:42:27

Hola Gustavo.

Disculpa pero no entiendo que relación tiene la última consulta con el código y el problema de visualización de tu primer mensaje. Tal vez si lo explicas un poco mas...

Saludos. :)

GustavoCruz 16-09-2013 07:17:09

Hola ecfisa,

Resulta que tengo una tabla en la que coloqué dos campos (fecha y hora), luego por caprichos del cliente me tocó visualizar el dato en un solo campo "fecha_hora"... lo de la visualización ya está pero ahora el problema es que como tengo esos dos campos. si hago la consulta
Código SQL [-]
... fecha between :fecha1 and :fecha2 and hora between :hora1 and :hora2
no me muestra los datos que se quieren. Por lo que pensé que si se puede concatenar esos dos campos y visualizar, entonces, de igual manera se podía lanzar la condición de busqueda en la tabla
Código SQL [-]
... n.fecha||' '||n.hora between cast(:fecha_hora1 as timestamp) and cast(:fecha_hora2 as timestamp)
los parámetros "fecha_hora" les paso el valor de la siguiente manera: "2013-09-09 10:11:00"
no loqro ver cuál es el problema.

Gracias por tu ayuda y ciertamente mi primera pregunta fue muy escueta

Gustavo Cruz

ecfisa 16-09-2013 08:33:03

Hola.

Si entendí bién lo que estas buscando, una opción es:
Código SQL [-]
CREATE TABLE TU_TABLA (
  ...
  FECHA DATE,
  HORA TIME,
  FECHA_HORA VARCHAR(16) COMPUTED BY (FECHA || ' ' || SUBSTRING(HORA FROM 1 FOR 5))
)

Si deseas agregar el campo sin recrear la tabla: (ver 2.5 o sup.)
Código SQL [-]
ALTER TABLE TU_TABLA ADD FECHA_HORA VARCHAR(16) 
  COMPUTED BY (FECHA || ' ' || SUBSTRING(HORA FROM 1 FOR 5))

Luego podrás ejecutar la consulta de este modo:
Código SQL [-]
SELECT *
FROM TU_TABLA
WHERE FECHA_HORA BETWEEN :P_FDESDE AND :P_FHASTA
Es claro que los valores que envíes como parámetros deberán tener formato 'dd/mm/yyy hh:mm'. (Es decir como el ejemplo que mencionas en el mensaje anterior "2013-09-09 10:11:00")

Saludos :)

GustavoCruz 17-09-2013 04:30:12

Hola amigo ecfisa, sólo hasta ahora pude revisar el foro; hice como me sugeriste pero no me mostró ningún dato; luego puse esta consulta y los datos sí me salieron
Código SQL [-]
select n.*
from  liquidos n
where cast(n.fecha||' '||n.hora as timestamp) between cast(:fecha1 as timestamp) and cast(:fecha2 as timestamp)
order by n.fecha, n.hora

Gracias por tu tiempo y ayuda...


Gustavo Cruz

ecfisa 17-09-2013 08:44:33

Hola Gustavo.

Antes que nada me alegra que encontraras solución :)

Creo saber por que no te mostró resultado... cometí un simple error de conteo. Pusiste claramente: "2013-09-09 10:11:00", entonces la hora tiene 8 digitos y no 5 :o

Tendría que haber sido:
Código SQL [-]
FECHA_HORA VARCHAR(18) COMPUTED BY (FECHA || ' ' || SUBSTRING(HORA FROM 1 FOR 8))

Entonces, la asignacion del parámetro desde Delphi, hubiera sido algo como:
Código Delphi [-]
   ...
   IBQuery1.ParamByName('P_FDESDE').AsString := DateToStr(Now) + ' ' + Copy(TimeToStr(Now), 1, 8);
   ...

Saludos :)


La franja horaria es GMT +2. Ahora son las 05:31:27.

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