2010-12-12 7 views
1

Pour résoudre le problème. Il y a deux significations: Heure: 12h20 et 23h55. Comment peut-on ajouter les valeurs-être à la sortie était 36h15.opérations avec time firebird

Ou comment garder ces valeurs en dB (Time) Time sauf que, était-ce possible d'ajouter?

+1

Dois-je comprendre que vous voulez ajouter deux fois et le résultat devrait être un autre * valide * temps? –

Répondre

2

Le type de données TIME de Firebird autorise uniquement la plage entre 00:00:00 et 24:00:00.

Si vous souhaitez stocker une durée arbitraire (disons en secondes), utilisez INTEGER ou le type de données NUMERIC. Puis le convertir en format de chaîne de temps si nécessaire.

+0

Cela me semble assez raisonnable: un type TIME [_OF_DAY] n'est pas le même qu'un type DURATION. – Shark8

0

j'ai le code ici convertir en entier secondes

CREATE PROCEDURE P_CONVERT_TIME (
    V_TIME_INT INTEGER 
) 
RETURNS (
    V_TIME_STR VARCHAR(20) 
) 
AS 
    DECLARE VARIABLE v_max_trans_hour integer; 
    DECLARE VARIABLE v_max_trans_min integer; 
    DECLARE VARIABLE v_max_trans_sec integer; 
    DECLARE VARIABLE v_max_trans_sec_gross integer; 
BEGIN 
    v_max_trans_sec = cast(v_Time_Int as integer); 
    v_max_trans_hour = coalesce(div(v_max_trans_sec, 3600), 0); 
    if (v_max_trans_hour > 0) then 
     v_max_trans_sec = v_max_trans_sec - (3600 * v_max_trans_hour); 
    v_max_trans_min = coalesce(div(v_max_trans_sec, 60), 0); 
    if (v_max_trans_min > 0) then 
     v_max_trans_sec = v_max_trans_sec - (60 * v_max_trans_min); 

    if (v_max_trans_hour > 0) then begin 
     if (v_max_trans_hour < 10) then begin 
     V_Time_Str ='0'||v_max_trans_hour||':'; end else 
     V_Time_Str=v_max_trans_hour||':'; 
    end else V_Time_Str='00:'; 

    if (v_max_trans_min > 0) then begin 
     if (v_max_trans_min <10) then begin 
     V_Time_Str =V_Time_Str ||'0'||v_max_trans_min||':'; end else 
     V_Time_Str =V_Time_Str ||v_max_trans_min||':'; 
    end else V_Time_Str =V_Time_Str ||'00:'; 

    if (v_max_trans_sec > 0) then begin 
     if (v_max_trans_sec <10) then begin 
     V_Time_Str =V_Time_Str ||'0'|| v_max_trans_sec; end else 
     V_Time_Str =V_Time_Str || v_max_trans_sec; 

    end else V_Time_Str =V_Time_Str ||'00'; 
    suspend; 
END 
;