2010-12-12 80 views
1

解決此問題。 有兩個含義時間:12:20和23:55。如何增加在出口處的值是36:15。運行時間firebird

或者如何將這些值保持爲dB(時間)除了那個時間以外,是否有可能增加?

+1

我是否正確,您要添加兩次理解和結果應該是另一個*有效*時間? – 2010-12-12 13:18:41

回答

2

Firebird的數據類型TIME只允許00:00:00和24:00:00之間的範圍。

如果要存儲任意數量的時間(比如說以秒爲單位),請使用INTEGER或NUMERIC數據類型。然後根據需要將其轉換爲時間字符串格式。

+0

這聽起來對我來說很合理:TIME [_OF_DAY]類型與DURATION類型不同。 – Shark8 2013-10-13 18:28:33

0

我有代碼在這裏秒轉換爲整數

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 
;