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 :)
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.