如何将YY转换为YYYY ORACLE

时间:2018-01-03 02:05:16

标签: oracle date plsql

如何将YY转换为YYYY,如下所示,如果我在下面运行示例,我将收到年份'0007':

   DECLARE
       lv_promcode_txt VARCHAR(6) := 'A0807X';
       lv_prommth_txt VARCHAR2(7);
       lv_promyear_txt VARCHAR2(7);
   BEGIN
       lv_prommth_txt := SUBSTR(lv_promcode_txt, 2,2);
       DBMS_OUTPUT.PUT_LINE('Month of promo code is: '|| 
       TO_(TO_DATE(lv_prommth_TXT,'MM'), 'MONTH'));

       lv_promyear_txt := SUBSTR(lv_promcode_txt, 4,2);
       DBMS_OUTPUT.PUT_LINE('Year of promo code is: '||TO_CHAR(TO_DATE  
       (lv_promyear_txt, 'YYYY'),'YYYY'));
   END;

2 个答案:

答案 0 :(得分:3)

您的格式掩码错误。例如:

   select TO_CHAR(TO_DATE (SUBSTR('A0807X', 4,2), 'YY'),'YYYY') from dual

返回2007

答案 1 :(得分:3)

替换代码的最后DBMS_OUTPUT.PUT_LINE部分
DBMS_OUTPUT.PUT_LINE('Year of promo code is ( Style 1 ) : '||TO_CHAR(TO_DATE(lv_promyear_txt, 'YYYY'),'YYYY'));
DBMS_OUTPUT.PUT_LINE('Year of promo code is ( Style 2 ) : '||TO_CHAR(TO_DATE(lv_promyear_txt, 'RRRR'),'YYYY'));

YYYY函数中,只需更改RRRR文字TO_DATE即可。

这个概念与year 2k problem有关。

对于日期TO_DATE('18', 'RRRR'),结果2018为年份(对于年份)  当前世纪the last two digits of years介于00 - 49)之间,

对于日期TO_DATE('74', 'RRRR'),结果1974为年份(对于年份)  上个世纪the last two digits of years介于50 - 99

之间