DBMS_OUTPUT是DISPLAY。因此,要显示DATE,您需要TO_CHAR。
STV_FROM_DATEBCKUP:=to_date(STV_FROM_DATE_BC,'DD:MM:YY:HH24:MI:SS'); dbms_output.put_line(STV_FROM_DATEBCKUP);
永远不要使用YY,总是提到 4 位数的YYYY来表示完整的年份。您不想再次引入Y2K错误。上面,您尝试显示日期值,但没有提及要显示的格式模型。所以只需使用 TO_CHAR 和适当的格式模型。
原因如果不提供正确的格式模型,您的客户端将仅根据您的语言环境特定的 NLS 设置进行显示。例如,如果我只显示 sysdate,我会在v$parameters中看到NLS_DATE_FORMAT中提到的格式。
SQL> select parameter, value from v$nls_parameters where parameter='NLS_DATE_FORMAT';
PARAMETER VALUE
-------------------- --------------------
NLS_DATE_FORMAT DD-MON-RR
SQL> select sysdate from dual;
SYSDATE
---------
27-JAN-15
SQL>
所以,我得到了27-JAN-15
SYSDATE,因为我的 NLS_DATE_FORMAT 是DD-MON-RR
. 您可以在系统级别或会话级别设置它。
SQL> alter session set NLS_DATE_FORMAT='DD:MM:YYYY:HH24:MI:SS';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
27:01:2015:11:54:07
SQL>
因此,您可以设置您NLS_DATE_FORMAT
以设置适合您的格式模型。让我们看一个测试用例 -
SQL> set serveroutput on
SQL> DECLARE
2 STV_FROM_DATE_BC VARCHAR2(20);
3 STV_FROM_DATEBCKUP DATE;
4 BEGIN
5 STV_FROM_DATEBCKUP:= NULL;
6 STV_FROM_DATE_BC :='01:JAN:2000:';
7 STV_FROM_DATE_BC :=STV_FROM_DATE_BC||'00:00:00';
8 dbms_output.put_line('Input date literal = '||STV_FROM_DATE_BC);
9 STV_FROM_DATEBCKUP:=to_date(STV_FROM_DATE_BC,'DD:MON:YYYY:HH24:MI:SS');
10 dbms_output.put_line('Date without format model = '||STV_FROM_DATEBCKUP);
11 dbms_output.put_line('Date with proper format model = '||TO_CHAR(STV_FROM_DATEBCKUP,'DD:MM:YYYY:HH24:MI:SS'));
12 END;
13 /
Input date literal = 01:JAN:2000:00:00:00
Date without format model = 01-JAN-00
Date with proper format model = 01:01:2000:00:00:00
PL/SQL procedure successfully completed.
SQL>