我想将varchar2类型的IN参数转换为日期,以便可以在两个输入日期之间从数据库中提取数据。我有一个问题和一个问题。
问题是我遇到了错误
“ PLS-00221:to_date不是过程或未定义”
当我有以下代码时:
create or replace procedure display_users( pi_date1 in varchar2,
pi_date2 in varchar2,
po_userc out sys_refcursor) is
begin
if pi_date1 is not null then
to_date(pi_date1, 'DD/MM/YYYY HH24:MI:SS');
end if;
begin
open po_userc for
select ...
from ...
where ...
and ...
and t.inserted_date betweeen pi_date1 and pi_date2 ;
end;
end;
我对pl / sql过程不是很熟悉,我尝试了许多其他方法来使其工作,但我却做不到。
问题是我在数据库中的日期是这样的:“ 16.08.2018 10:30:48”(我无法更改数据库中的数据格式)
日期部分由句点(。)分隔。自日期以来,to_date(pi_date1, 'DD/MM/YYYY HH24:MI:SS');
是否可以用“ /”分隔?
答案 0 :(得分:2)
正如错误消息已经指出的那样,to_date
不是一个过程。 to_date
是一个函数,一个函数总是返回一个值。您必须将此值分配给变量。
declare
v_date date;
begin
v_date := to_date(pi_date1, 'DD/MM/YYYY HH24:MI:SS');
end;
/
转换为日期时,必须注意格式。日,月,年,小时,分钟和秒之间是否有分隔符?如果它是一个点(.
),则必须将其指定为格式。
如果您的字符串如下所示:01.01.2000 01:01:01
然后,您的格式必须如下所示:'DD.MM.YYYY HH24:MI:SS'
如果您的字符串如下所示:01/01/2000 01:01:01
然后,您的格式必须如下所示:'DD/MM/YYYY HH24:MI:SS'