28

例子:

select ename from emp where hiredate = todate('01/05/81','dd/mm/yy')

select ename from emp where hiredate = todate('01/05/81','dd/mm/rr')

返回不同的结果

4

6 回答 6

46

http://oracle.ittoolbox.com/groups/technical-functional/oracle-dev-l/difference-between-yyyy-and-rrrr-format-519525

YY 允许您仅检索年份的两位数字,例如 1999 年的 99。其他数字 (19) 自动分配给当前世纪。RR 通过四舍五入将两位数年份转换为四位数年份。

50-99 存储为 1950-1999,以 00-49 结尾的日期存储为 2000-2049。RRRR 接受一个四位数的输入(尽管不是必需的),并像 RR 一样转换两位数的日期。YYYY 接受 4 位输入,但不进行任何日期转换

本质上,您的第一个示例将假设 81 为 2081,而 RR 假设为 1981。因此,第一个示例不应返回任何行,因为您很可能在 2081 年 5 月 1 日之后还没有雇用任何人:-)

于 2008-08-20T23:11:32.710 回答
5

y2k 兼容性。rr 假设 01 为 2001,yy 假设 01 为 1901

参见:http ://www.oradev.com/oracle_date_format.jsp

编辑:该死!michael "quickfingers" stum 打败了我

/mp

于 2008-08-20T23:12:36.763 回答
5

@迈克尔·斯图姆

我上一次 Oracle 体验是很久以前的事了

呃,是2000年之前的吗?:p

...

yy 会一直假设为 19xx 吗?

根据您的消息来源,我们得到以下场景:

USING
ENTERED
STORED
SELECT of date column


YY
22-FEB-01
22-FEB-1901
22-FEB-01


YYYY
22-FEB-01
22-FEB-0001
22-FEB-0001


RR
22-FEB-01
22-FEB-2001
22-FEB-01


RRRR
22-FEB-01
22-FEB-2001
22-FEB-2001 

/mp

于 2008-08-21T01:46:07.970 回答
1

RR 显示四位数字为 1999 或 2015(如果小于 49 则考虑 20 世纪)

于 2011-04-21T05:54:05.750 回答
0

关于 RR 或 RRRR

当我们插入带有 2 位数年份的日期(即 09/oct/15)时,Oracle 可能会自动更改世纪,因此解决方案是 4 位数日期。但是在最近的一些版本中引入了 4 位版本,因此早期版本中这个问题的解决方案是RRRRRR. 但请注意,它仅适用于TO_DATE()函数,而不适用于TO_CHAR()函数。

每当在日期上进行插入/更新时,我们应该始终澄清与日期转换相关的时钟中运行的当前日期,因为 Oracle 通过联系服务器进行每次日期转换。

为了保持世纪之间的一致性,最好使用 4 位数年份执行日期转换。

关于 YY 或 YYYY

它接受日期,但没有自动更改日期的功能。

此图像显示插入两位数日期时的行为(即 09/oct/15)

于 2015-12-23T11:16:08.633 回答
-1

RR 代表 1990 年之后,yy 假设 90 为 2090 年......就像我们在当前年份一样,......

于 2009-06-25T07:00:23.817 回答