例子:

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')

返回不同的结果

有帮助吗?

解决方案

http://oracle.ittoolbox.com/groups/technical-function/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 日之后尚未雇用任何人员:-)

其他提示

@迈克尔·斯图姆

我上次体验 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

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

看: http://www.oradev.com/oracle_date_format.jsp

编辑:该死! 迈克尔·“快指”斯图姆 打败我!

/mp

RR显示四位数字为1999或2015(如果<49则认为是20世纪)

关于 RR 或 RRRR

当我们插入两位数年份的日期时(即09/OCT/15)然后Oracle可能会更改几个世纪,因此解决方案为4位数字。但是在最近的某些版本中引入了4个数字版本,因此此问题的解决方案是 RR 或者 RRRR. 。但是请注意,它仅适用于 TO_DATE() 功能但不与 TO_CHAR() 功能。

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

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

关于 YY 或 YYYY

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

该图像显示了插入两位数字的日期时的行为(即2015 年 10 月 9 日)

RR 代表 1990 年之后,yy 假设 90 为 2090....正如我们现在所处的年份一样,...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top