题
例子:
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')
返回不同的结果
解决方案
YY允许您仅检索一年的两位数,例如1999年的99位。其他数字(19)自动分配到当前世纪。RR 通过四舍五入将两位数年份转换为四位数年份。
50-99存储为1950-1999,00-49结束的日期存储为2000-2049。RRRR接受四位数输入(尽管不需要),并像RR一样转换两个数字的日期。Yyyy接受4位输入,但没有进行任何日期转换
本质上,您的第一个示例将假设 81 是 2081,而 RR 则假设 1981。因此,第一个示例不应返回任何行,因为您很可能在 2081 年 5 月 1 日之后尚未雇用任何人员:-)
其他提示
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
它接受日期,但没有自动更改日期的功能。
RR 代表 1990 年之后,yy 假设 90 为 2090....正如我们现在所处的年份一样,...