我在SQL中有2个查询:
select trunc(to_date('27-Jul-1987'),'YYYY') FROM dual;
Run Code Online (Sandbox Code Playgroud)
和
select trunc(to_date('27-Jul-1987'),'RRRR') FROM dual;
Run Code Online (Sandbox Code Playgroud)
两者都给了我相同的结果.'RRRR'和'YYYY'有什么区别?
Boh*_*ian 29
YYYY 将当前年份指定为4位数.
RRRR格式是指2位数年的范围内00,以49被认为是在当前世纪(即具有相同的前两个数字作为当前年),并给出年50通过99被认为是在前面的世纪.
如果在要转换的日期中未指定年份的前2位数字:
试试这个示例代码:
SELECT TO_DATE ('010199', 'MMDDYYYY') AS date_a,
TO_DATE ('010199', 'MMDDYY') AS date_b,
TO_DATE ('010199', 'MMDDRR') AS date_c,
TO_DATE ('010199', 'MMDDRRRR') AS date_d
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
2014年12月1日运行时的结果:
DATE_A DATE_B DATE_C DATE_D
--------- --------- --------- ---------
1/1/0099 1/1/2099 1/1/1999 1/1/1999
Run Code Online (Sandbox Code Playgroud)
这个oracle 链接提供了很好的描述和示例.
从以上链接:
- 如果指定的两位数年份是00到49,那么
- 如果当前年份的最后两位数字是00到49,那么返回的年份与当前年份的前两位数字相同.
- 如果当前年份的最后两位数字是50到99,那么返回年份的前2位数字比当前年份的前2位数字大1.
- 如果指定的两位数年份是50到99,那么
- 如果当前年份的最后两位数字是00到49,那么返回年份的前2位数字比当前年份的前2位数字少1.
- 如果当前年份的最后两位数字是50到99,那么返回的年份与当前年份的前两位数字相同.
这个:
SQL> select to_char(to_date('72-01-01','rrrr-mm-dd'),'yyyy') from dual;
Run Code Online (Sandbox Code Playgroud)
会给你:
1972年
但是这个:
SQL> select to_char(to_date('72-01-01','yyyy-mm-dd'),'yyyy') from dual;
Run Code Online (Sandbox Code Playgroud)
会给你:
0072
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66416 次 |
| 最近记录: |