Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   concatenar fecha y hora en timestamp (https://www.clubdelphi.com/foros/showthread.php?t=56592)

Vlady 21-05-2008 16:33:37

concatenar fecha y hora en timestamp
 
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:

Código:

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:

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

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

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

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


La franja horaria es GMT +2. Ahora son las 09:35:57.

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