【发布时间】:2010-09-06 08:26:44
【问题描述】:
例子:
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')
返回不同的结果
【问题讨论】:
例子:
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 只允许您检索年份的两位数字,例如,99 in 1999. 其他数字 (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
编辑:该死! michael "quickfingers" stumbeat me to it!
/mp
【讨论】:
我上一次 Oracle 体验是很久以前的事了
嗯,是在 2000 年之前吗? :p
...
yy 是否总是假定为 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
【讨论】:
RR 代表 1990 年后,yy 假设 90 为 2090....就像我们在当前年份一样,...
【讨论】:
rr 因您是否为 before the 50th year of the century 而不同。
RR 显示四位数字为 1999 或 2015(如果是
【讨论】:
当我们插入带有 2 位数年份的日期时(即 09/oct/15)
那么甲骨文可能会自动更改世纪,因此
解决方案是 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)
【讨论】: