Fru*_*ner 2 oracle plsql intervals
我有一个约会,我想打印那个日期的偏移量.我可以做这个:
dbms_output.put_line(to_char(g_startDate - interval '4' month ,'YYYY-MM-DD'));
Run Code Online (Sandbox Code Playgroud)
它工作正常.问题是间隔是可变的.当我尝试这个:
dbms_output.put_line(to_char(g_startDate - interval g_dateOffsetAmt month ,'YYYY-MM-DD'));
Run Code Online (Sandbox Code Playgroud)
我收到编译器错误.
我想这可能是因为g_dateOffsetAmt是一个integer让我尝试这样做:
dbms_output.put_line(to_char(g_startDate - interval to_char(g_dateOffsetAmt) month ,'YYYY-MM-DD'));
Run Code Online (Sandbox Code Playgroud)
虽然我仍然遇到编译器错误说:
Error: PLS-00103: Encountered the symbol "TO_CHAR" when expecting one of the following:
. ) , * @ & | = - + at in is mod remainder not rem =>
.. or != or ~= >= and or like
LIKE2_ LIKE4_ LIKEC_ as between from using || member
SUBMULTISET_
The symbol "," was substituted for "TO_CHAR" to continue.
Line: 704
Error: PLS-00103: Encountered the symbol "MONTH" when expecting one of the following:
. ( ) , * % & | = - + at in is mod remainder not range
rem => .. or != or ~= >= and or
like LIKE2_ LIKE4_ LIKEC_ between || multiset member
SUBMULTISET_
The symbol "." was substituted for "MONTH" to continue.
Line: 704
还有其他方法可以做到这一点吗?
您可能希望使用NumToYMInterval函数
declare
v_interval pls_integer := 4;
begin
dbms_output.put_line( sysdate - NumToYMInterval( v_interval, 'month' ) );
end;
/
Run Code Online (Sandbox Code Playgroud)