to_date年份不返回4位数,只有2位数

时间:2015-11-20 19:32:57

标签: sql date plsql

我正在尝试以DD/MON/YYYY格式输出日期,其中年份有4位数。我的变量返回一年有4位数(例如2000,而不是00),但是当我通过to_date函数运行它时,它似乎将它指定为2位数。

我试图显示输出以隔离我今年给出的输入,并输出年变量是4位数,所以我不确定出了什么问题。

这是我的代码:

myDate1 := to_date(myDate1_DD || '/' || myDate1_MON || '/' || myDate1_YY , 'DD/MON/YYYY'); 
myDate2 := to_date(myDate2_DD || '/' || myDate2_MON || '/' || myDate2_YY , 'DD/MON/YYYY');

IF  myDate1 > myDate2  
THEN
    -- return '01/JAN/01 > 01/JAN/99. The year for date1 is 2001'
    return myDate1 || ' > ' || myDate2 || '. The year for date1 is  ' || myDate1_YY;
ELSE
    -- return '01/JAN/03 > 01/JAN/02. The year for date2 is 2003'
    return myDate2 || ' > ' || myDate1 || '. The year for date2 is  ' || myDate2_YY;
END IF;

所以基本上不是像01/JAN/03这样的输出,我希望输出像01/JAN/2003

干杯

1 个答案:

答案 0 :(得分:2)

您将看到NLS_DATE_FORMAT中指定的默认日期格式。

  

NLS_DATE_FORMAT指定用于TO_CHAR和TO_DATE函数的默认日期格式。此参数的默认值由NLS_TERRITORY确定。

     

此参数的值可以是任何有效的日期格式掩码,并且该值必须用双引号括起来。例如:

     

NLS_DATE_FORMAT =“MM / DD / YYYY”

看看你的是什么:

SELECT value FROM v$nls_parameters WHERE parameter ='NLS_DATE_FORMAT';

请参阅kordirko关于获取所需日期格式的评论:

return to_char(myDate1, 'dd/MON/yyyy') || ' > ' || to_char(myDate2, 'dd/MON/yyyy');

使用dbms_output而不是返回的示例:

DECLARE
  myDate1_DD VARCHAR2(10) := '01';
  myDate1_MON  VARCHAR2(10) := 'JAN';
  myDate1_YY   VARCHAR2(10) := '2001';

  myDate2_DD VARCHAR2(10) := '01';
  myDate2_MON VARCHAR2(10) := 'JAN';
  myDate2_YY   VARCHAR2(10) := '2003';

  myDate1 DATE;
  myDate2 DATE;
BEGIN
myDate1 := to_date(myDate1_DD || '/' || myDate1_MON || '/' || myDate1_YY , 'DD/MON/YYYY'); 
myDate2 := to_date(myDate2_DD || '/' || myDate2_MON || '/' || myDate2_YY , 'DD/MON/YYYY');

IF  myDate1 > myDate2  
THEN
    -- return '01/JAN/01 > 01/JAN/99. The year for date1 is 2001'
    DBMS_OUTPUT.put_line( to_char(myDate1, 'dd/MON/YYYY') || ' > ' || to_char(myDate2, 'dd/MON/YYYY') || '. The year for date1 is  ' || myDate1_YY);
ELSE
    -- return '01/JAN/03 > 01/JAN/02. The year for date2 is 2003'
    DBMS_OUTPUT.put_line( to_char(myDate2, 'dd/MON/YYYY') || ' > ' || to_char(myDate1, 'dd/MON/YYYY') || '. The year for date2 is  ' || myDate2_YY);
END IF;
END;
/

使用这些输入,dbms_output结果为:“01 / JAN / 2003> 01 / JAN / 2001.date2的年份为2003”