2014-07-22 64 views
1

變量傳遞時間間隔此查詢返回基於給定時間間隔值10經由的Oracle SQL

SELECT TO_CHAR((TO_DATE('23:20:20','HH24:MI:SS') - INTERVAL '10' MINUTE), 'HH24:MI:SS') 
FROM DUAL; 

輸出:

23:10:20 

我想通過使用下面通過變量此分鐘間隔代碼:

declare 
test1 varchar(30); 
begin 
test1:=18; 
SELECT TO_CHAR((TO_DATE('23:20:20','HH24:MI:SS') - INTERVAL ||test1|| MINUTE), 'HH24:MI:SS') 
FROM DUAL; 
end; 

但它不工作 - 錯誤是

PL/SQL:ORA-00904: 「分」:無效的標識符

請幫助我在此。謝謝!

回答

1

你必須使用- NUMTODSINTERVAL(test1, 'MINUTE')

所以你的說法。

SELECT TO_CHAR((TO_DATE('23:20:20','HH24:MI:SS') - NUMTODSINTERVAL(test1, 'MINUTE')), 'HH24:MI:SS') 
FROM DUAL; 
3

你不能這樣做,因爲它必須是字符串文字,而不是變量。但是你可以使用the numtodsinterval() function代替:

declare 
    test1 number; 
begin 
    test1:=18; 
    SELECT TO_CHAR(TO_DATE('23:20:20','HH24:MI:SS') 
    - NUMTODSINTERVAL(test1, 'MINUTE'), 'HH24:MI:SS') 
    INTO <something> 
    FROM DUAL; 
end; 
/

SQL Fiddle,包括一個非常簡單的功能版本。

+0

其工作me.Thanks烏拉圭回合的幫助! – user2862073

+0

+1,也改變TEST1的數據類型 –

0

試試這個:

DECLARE 
    l_val  NUMBER; 
    l_result VARCHAR2(20); 
BEGIN 
    l_val := 10; 

    SELECT TO_CHAR((TO_DATE('23:20:20', 'HH24:MI:SS') - INTERVAL '1' MINUTE * l_val), 'HH24:MI:SS') INTO l_result FROM DUAL; 

    DBMS_OUTPUT.put_line(l_result); 
END; 

輸出將是:
二十三時10分20秒