Oracle DB未声明'正确'

sto*_*es2 0 oracle

我期望得到ls_fr,ls_to这是使用if语句更新.

但查询异常消息说Not declared RIGHT.我以为RIGHT是内置功能.我该如何解决这个问题或宣布RIGHT功能呢?

declare
ls_today VARCHAR2(15);
ls_time VARCHAR2(15);
ls_bef_day VARCHAR2(15);
ls_next_day VARCHAR2(15);
ls_fr VARCHAR2(15);
ls_to VARCHAR2(15);
begin
ls_today := '20181105';
ls_time := '20181105175612';
ls_bef_day := '20181104';
ls_next_day := '20181106';
If RIGHT(ls_time, 6) >= '000000' and RIGHT(ls_time, 6) <= '055959' Then 
ls_fr := ls_bef_day;
ls_to := ls_today;
Else
ls_fr := ls_today;
ls_to := ls_next_day;
End If;
select ls_fr, ls_to INTO ls_fr, ls_to FROM DUAL;
end;
Run Code Online (Sandbox Code Playgroud)

Rad*_*t81 5

最简单的是使用SUBSTR而不是RIGHT负面的位置(因为RIGHT在oracle中没有):

If SUBSTR(ls_time, -6) >= '000000' and SUBSTR(ls_time, -6) <= '055959' Then
Run Code Online (Sandbox Code Playgroud)

负位置SUBSTR意味着根据字符串的结尾给出位置.如果你省略了如上所述的长度参数,则直到字符串结尾才会获取子字符串.因此SUBSTR(..., -pos)相当于RIGHT(..., pos).