Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Formato de TimeStamp (https://www.clubdelphi.com/foros/showthread.php?t=89201)

mjjj 14-10-2015 23:30:21

Formato de TimeStamp
 
Estimados, utilizo Firebird 2.5 y necesito dar formato a una diferencia de 2 campos tipo timestamp.

Por ejemplo si la diferencia es de un día, 2 horas y 45 minutos, que el formato sea 1d 2h 45m.
Si es de 5 horas, que le formato sea 5h
Si es de menos de 1 minutos, que el formato sea <1m

He probado varios código, pero no me está resultado.

Código SQL [-]
select CAST(termino AS time) - CAST(comienzo AS time) as registro from Tabla

select cast(datediff(second, comienzo, termino) as time) as registro from Tabla

Alguna idea como se resuelve esto??

Gracias

Casimiro Notevi 14-10-2015 23:31:44

No le corresponde a la base de datos dar formato a un valor, sino a delphi.

mjjj 15-10-2015 00:09:35

Perfecto... Y como hago eso?? 😁

En la definicion de los campos persistentes del query??
Igual el formato es más complejo que un simple separador de miles...

Como lo hago ??

AgustinOrtu 15-10-2015 01:35:58

Una opcion es el OnGetText del TField. Tambien podes levantar el valor del campo (AsDateTime) y mandar todo a una funcion y usar alguna variante de FormatDateTime, o DateToStr o una funcion propia

Combat-F2D 15-10-2015 07:18:17

y no podrias realizarlo devolviendo una string mediante un store procedure???

mjjj 15-10-2015 17:50:08

Finalmente lo resolví con el siguiente código en evento onGetText del campo del query.

Código Delphi [-]
procedure Tform.IBQuery1REGISTROGetText(Sender: TField;
  var Text: string; DisplayText: Boolean);
var dias, horas, minutos, segundos: integer;
begin
if sender.AsString <> '' then
begin
segundos := sender.AsInteger;

dias := segundos div 86400;
segundos := segundos - dias * 86400;

horas := segundos div 3600;
segundos := segundos - horas * 3600;

minutos := segundos div 60;
segundos := segundos - minutos * 60;

if dias > 0 then text := inttostr(dias)+'d';
if horas > 0 then text := text + ' '+inttostr(horas)+'h';
if minutos > 0 then text := text + ' '+inttostr(minutos)+'m';

if text = '' then
if segundos > 0 then text := '<1m';
end;
end;

Gracias y saludos.


La franja horaria es GMT +2. Ahora son las 01:51:26.

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