Oracle SQL认为它';是1909年,不是2009年
这是Castel 12c SQL教科书中的图10-41 这本书有一个在我本地的SQL开发人员上运行的示例,它返回了错误的年数,因为它认为查询的是1909年,而不是2009年Oracle SQL认为它';是1909年,不是2009年,sql,oracle,Sql,Oracle,这是Castel 12c SQL教科书中的图10-41 这本书有一个在我本地的SQL开发人员上运行的示例,它返回了错误的年数,因为它认为查询的是1909年,而不是2009年 select empno, lname, fname,hiredate, ROUND(MONTHS_BETWEEN(hiredate, '01-JUL-09')/12,2) "Years", case when (months_between('01-JUL-09', hiredate)/12
select empno, lname, fname,hiredate,
ROUND(MONTHS_BETWEEN(hiredate, '01-JUL-09')/12,2) "Years",
case
when (months_between('01-JUL-09', hiredate)/12) < 4 then 'Level 1'
when (months_between('01-JUL-09', hiredate)/12) < 8 then 'Level 2'
when (months_between('01-JUL-09', hiredate)/12) < 11 then 'Level 3'
when (months_between('01-JUL-09', hiredate)/12) < 15 then 'Level 4'
else 'Level 5'
end "Retire Level"
from employees;
如何告诉SQL计算之间的月份是2009年?尝试使用
to\u DATE
将字符串日期转换为实际日期,例如to\u DATE('01-JUL-2009','dd MON YYYY')
使用RR日期格式,因此00到49是当前世纪(50到99是下一个世纪),因此:
见:
另外,有点超出我的知识范围,但我认为您可以使用NLS_date_格式将此日期格式设置为默认格式,因此对该术语进行搜索-例如
如何告诉SQL在计算之间的几个月是2009年
具体点(不要依赖日期文字的默认解释),使用date
或TO_date()
例如
DATE '2009-07-01'
TO_DATE('01-JUL-2009','dd-mmm-yyyyy')
DATE
需要YYYY-MM-DD文本。而TO_DATE()
允许您指定要使用的文字模式。看
ps:就我个人而言,我不喜欢使用与口语相关的日期文字,或2位数的年份引用我非常怀疑您的说法,即Oracle将
'01-JUL-2009'
解释为1909年7月1日。你能拿出一个能证明这种行为的数字吗?@ruakh,教科书上的数字已经列出了。我在SQL开发者虚拟机上。
TO_DATE('01-JUL-09', 'DD-MON-RR')
DATE '2009-07-01'
TO_DATE('01-JUL-2009','dd-mmm-yyyyy')