此查询根据给定的间隔时间10返回值。
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:“MINUTE”:标识符无效
请帮助我。谢谢!
答案 0 :(得分:6)
你不能这样做,因为它必须是字符串文字,而不是变量。但您可以改为使用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,包括一个非常简单的函数版本。
答案 1 :(得分:4)
试试这个:
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;
输出将是:
23点十分20秒
答案 2 :(得分:1)
您必须使用- NUMTODSINTERVAL( test1, 'MINUTE' )
所以你的陈述是。
SELECT TO_CHAR((TO_DATE('23:20:20','HH24:MI:SS') - NUMTODSINTERVAL( test1, 'MINUTE' )), 'HH24:MI:SS' )
FROM DUAL;