oracle 11g日期函数相关 -

时间:2015-09-17 10:32:09

标签: sql oracle sqldatetime

我们如何知道给定的2位数年份代码(YY)是19XX还是20XX?例如,如果我们输入07-apr-10,则1019102010为{{1}}?

3 个答案:

答案 0 :(得分:1)

一般来说,您应该使用RR datetime format element将两位数年份转换为全年。

  

如果指定的两位数年份是00到49,那么

     
      
  • 如果当前年份的最后两位数字是00到49,那么返回的年份与当前年份的前两位数字相同。
  •   
  • 如果当前年份的最后两位数字是50到99,那么返回年份的前2位数字比当前年份的前2位数字大1。
  •   
     

如果指定的两位数年份是50到99,那么

     
      
  • 如果当前年份的最后两位数字是00到49,那么返回年份的前2位数字比当前年份的前2位数字少1。
  •   
  • 如果当前年份的最后两位数字是50到99,那么返回的年份与当前年份的前两位数字相同。
  •   

我认为你不想要YY,因为它总是用当前年份的数字填充缺失的数字。例如:

SELECT TO_CHAR(TO_DATE('98', 'YY'), 'YYYY') FROM dual; -- returns 2098, not 1998
SELECT TO_CHAR(TO_DATE('9',  'Y'),  'YYYY') FROM dual; -- returns 2019
SELECT TO_CHAR(TO_DATE('98', 'RR'), 'YYYY') FROM dual; -- returns 1998 (until we get to 2050)

答案 1 :(得分:0)

编辑:抱歉我的客户端设置中只有YY。添加YYYY后,我的结果低于结果。所以看起来默认情况下YY需要20YY

 select to_date('7/10/15','DD/MM/YY') from dual;
 07-OCT-2015

 select to_date('7/10/15','DD/MM/YYYY')  from dual;
 07-OCT-0015

答案 2 :(得分:0)

要检查一下:

首先,您需要将具有YY年格式的CHAR转换为日期:

TO_DATE('20-01-15','DD-MM-YY');

然后立即将其转换回CHAR,并查看输出,如下所示:

SELECT TO_CHAR(TO_DATE('20-01-15','DD-MM-YY'),'YYYY') FROM DUAL;