PDA

Ver la Versión Completa : Cómo concatenar fecha y hora


GustavoCruz
15-09-2013, 22:43:38
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
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.


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 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 ... 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 ... 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:

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.)

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:

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 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:

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:

...
IBQuery1.ParamByName('P_FDESDE').AsString := DateToStr(Now) + ' ' + Copy(TimeToStr(Now), 1, 8);
...


Saludos :)