oracle的'yy'和'rr'日期掩码有什么区别?

时间:2008-08-20 23:07:51

标签: sql oracle

示例:

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

返回不同的结果

6 个答案:

答案 0 :(得分:37)

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

  

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)

@ Michael Stum

  

我很久以前的Oracle体验

嗯,是吗,在2000年之前? :P

...

  

你会永远假设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)

关于RR或RRRR

当我们插入2位数的日期时(即09 / oct / 15) 那么Oracle可能会自动改变几个世纪 解决方案是4位数日期。但是引入了4位数版本 一些最近的版本,因此解决了这个问题 在早期版本中,RRRRRR。但请注意,它只能起作用 使用TO_DATE()函数但不使用TO_CHAR()函数。

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

为了保持几个世纪之间的一致性,最好用4位数年份执行日期翻译。

关于YY或YYYY

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

This Image shows behaviour when inserting date with two digit (i.e. 09/oct/15)

答案 5 :(得分:-1)

RR代表1990年后,yy假设90年代为2090 ....正如我们现在的年龄,......