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

jua*_*uan 23 sql oracle

例:

select ename from emp where hiredate = todate('01/05/81','dd/mm/yy')
Run Code Online (Sandbox Code Playgroud)

select ename from emp where hiredate = todate('01/05/81','dd/mm/rr')
Run Code Online (Sandbox Code Playgroud)

返回不同的结果

Mic*_*tum 38

http://oracle.ittoolbox.com/groups/technical-functional/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日之后没有聘请任何人:-)


mau*_*ana 5

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

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

编辑:该死!michael "quickfinger" stum 击败了我

/mp


mau*_*ana 5

@ Michael Stum

我的上一次Oracle体验是很久以前的事了

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

...

你会永远假设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 
Run Code Online (Sandbox Code Playgroud)

/ MP