示例:
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')
返回不同的结果
答案 0 :(得分:37)
YY允许您只检索一年中的两位数,例如99 in 其他数字(19)自动分配给当前数字 世纪。 RR通过四舍五入将两位数年份转换为四位数年份。
50-99存储为1950-1999,以00-49结尾的日期存储为 2000至2049年。 RRRR接受四位数输入(虽然不是必需的),和 像RR一样转换两位数的日期。 YYYY接受4位数输入但不接受 做任何转换日期
基本上,你的第一个例子假设81是2081而RR则假设1981.所以第一个例子不应该返回任何行,因为你很可能在2081年5月1日之后没有雇用任何人: - )
答案 1 :(得分:5)
嗯,是吗,在2000年之前? :P我很久以前的Oracle体验
...
你会永远假设19xx吗?
according to your source,我们会遇到以下情况:
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
答案 2 :(得分:4)
y2k兼容性。 rr假设01为2001,yy假设01为1901
请参阅:http://www.oradev.com/oracle_date_format.jsp
编辑:该死的! michael "quickfingers" stum beat me to it!/ MP
答案 3 :(得分:1)
RR显示1999年或2015年的四位数字(如果<49则会考虑20世纪)
答案 4 :(得分:0)
当我们插入2位数的日期时(即09 / oct / 15)
那么Oracle可能会自动改变几个世纪
解决方案是4位数日期。但是引入了4位数版本
一些最近的版本,因此解决了这个问题
在早期版本中,RR
或RRRR
。但请注意,它只能起作用
使用TO_DATE()
函数但不使用TO_CHAR()
函数。
每当在日期进行插入/更新时,我们应始终通过与日期转换相关联来澄清时钟中运行的当前日期,因为Oracle通过联系服务器进行每个日期转换。
为了保持几个世纪之间的一致性,最好用4位数年份执行日期翻译。
它接受日期但没有自动更改日期的功能。
This Image shows behaviour when inserting date with two digit (i.e. 09/oct/15)
答案 5 :(得分:-1)
RR代表1990年后,yy假设90年代为2090 ....正如我们现在的年龄,......