PDA

Ver la Versión Completa : concatenar fecha y hora en timestamp


Vlady
21-05-2008, 16:33:37
Hala amigos del foro tengo el siguiente inconveniente en una tabla tengo dos campos uno fecha y hora ambos de tipo timestamp en el campo de la fecha se ha programado q solo guarde la fecha es decir seria asi '12.04.2008 00:00' y en el otro se ha guardado la hora asi '30.12.1899 15.34' por dar un ejemplo lo q deseo es unir estos dos campos en uno solo donde quede tanto la hora como la fecha y asi eliminar uno de los dos he creado el siguiente prodedimiento:


CREATE PROCEDURE ACTUALIZARFECHA
as
declare variable fecha date;
declare variable horita time;
declare variable fechita date;
declare variable id integer;
begin
FOR SELECT ID, Cast (FECHA as date), CAST (HORA AS DATE), CAST (HORA AS TIME)
FROM ITEMSERVICIO INTO :ID, :FECHA, :FECHITA, :HORITA do
BEGIN
if (:FECHA <> :FECHITA) then
BEGIN
UPDATE ITEMSERVICIO SET HORA = :FECHA || :HORITA WHERE ID = :ID ;
END
END
end



el el problema radica en la sentencia update donde quiero guardar ya tanto la fecha de un campo como la hora del otro en un solo campo pero esta concatenación no me funciona estoy utilizando || para esto y me arroja un error, no se si existe alguna funcion q me una estos dos valores en uno solo.

Utilizo firebird 2.0 y delphi 7

Gracias

maeyanes
21-05-2008, 17:05:22
Hola...

Ya probaste con la funcion Extract?

Esto es de memoria:


create procedure ActualizarFecha
declare variable fecha varchar(10);
declare variable horita varchar(8);
declare variable fechita varchar(10);
declare variable Id integer;
as
begin
for
select id, cast(fecha as varchar(10)), cast(extract(Date from Hora) as varchar(10)),
cast(extract(Time from Hora) as varchar(8))
from ItemServicio into :ID, :Fecha, :Fechita, :Horita do
begin
if (:Fecha <> :Fechita) then
update ItemServicio set Hora = cast((:Fecha || ' ' || :Horita) as Timestamp) where Id = :Id;
end
end


Esto es solo una idea, no lo he probado y podría no funcionar...

Actualizando...

Leyendo la ayuda veo que se puede hacer concatenaciones de tipos Date y Time, de tal forma que:


create procedure ActualizarFecha
declare variable fecha Date;
declare variable horita Time;
declare variable fechita Date;
declare variable Id integer;
as
begin
for
select id, Extract(Date from Fecha), extract(Date from Hora), extract(Time from Hora)
from ItemServicio into :ID, :Fecha, :Fechita, :Horita do
begin
if (:Fecha <> :Fechita) then
update ItemServicio set Hora = :Fecha + :Horita where Id = :Id;
end
end



Saludos...

Caro
21-05-2008, 17:10:15
Hola Vlady, también se puede concatenar con el + acabo de hacer esta prueba y si funciona.


Select Cast(Campo1 as Date)+Cast(Campo2 as Time)
From tabla


Saluditos

Caro
21-05-2008, 17:19:49
Hola de nuevo, hice la prueba con un Update y si funciona el "+" para concatenar, el || solo funciona en las consultas, porque sera :rolleyes:.

Saluditos

Vlady
21-05-2008, 17:51:04
Gracias por sus respuestas esta es la solucion q me ha funcionado gracias a su colaboracion


CREATE PROCEDURE ACTUALIZARFECHA
as
declare variable fecha date;
declare variable horita time;
declare variable fechita date;
declare variable id integer;
begin

FOR SELECT ID, Cast (FECHA as date), CAST (HORA AS DATE), CAST (HORA AS TIME)
FROM ITEMSERVICIO INTO :ID, :FECHA, :FECHITA, :HORITA do
BEGIN
if (:FECHA <> :FECHITA) then
BEGIN
UPDATE ITEMSERVICIO SET HORA = Cast(:FECHA as Date)+Cast(:HORITA as Time)
WHERE ID = :ID ;
END
END