1

我们如何知道给定的 2 位数年份代码 (YY) 是 19XX 还是 20XX?例如,如果我们输入07-apr-10,那么是10年份1910还是2010

4

3 回答 3

1

一般来说,您应该使用RRdatetime 格式元素将两位数年份转换为完整年份。

如果指定的两位数年份是 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)
于 2015-09-17T10:53:12.233 回答
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;
于 2015-09-17T10:43:00.727 回答
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
于 2015-09-17T10:37:47.130 回答