我想询问两个日期之间的区别,而不考虑检查生日的年份。我找到查询来检查两个日期,并考虑一年。
例如,
SELECT to_date(SYSDATE,'DD-MM-YYYY') - to_date(dateofbirth,'DD-MM-YYYY')
FROM employees;
提前致谢..
答案 0 :(得分:2)
一种简单的方法是使用DDD
format model查看其年份中日期的序数:
to_number(to_char(sysdate, 'DDD')) - to_number(to_char(dateofbirth, 'DDD'))
CTE中有一些样本数据:
with t as (
select 1 as id, date '1980-04-21' as dateofbirth from dual
union all select 2 as id, date '1980-04-13' as dateofbirth from dual
union all select 3 as id, dat
)
select id, dateofbirth, to_char(sysdate, 'DDD'), to_char(dateofbirth, 'DDD'),
to_number(to_char(sysdate, 'DDD'))
- to_number(to_char(dateofbirth, 'DDD')) as days
from t
order by id;
ID DATEOFBIR TO_ TO_ DAYS
---------- --------- --- --- ----------
1 21-APR-80 107 112 -5
2 13-APR-80 107 104 3
3 29-MAR-80 107 089 18
但正如Damien_The_Unbeliever在评论中指出的那样,你需要定义,或者至少理解并接受闰年会发生什么。这种方法没有做任何巧妙的事情,但对于你正在做的事情可能已经足够好了。
答案 1 :(得分:0)
你应该试试这个
SQL> SELECT (TO_DATE('20120525', 'YYYYMMDD') - TO_DATE('20100101', 'YYYYMMDD')) diff_in_days
2 ,TRUNC(MONTHS_BETWEEN(TO_DATE('20120525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD')))
3 ,TRUNC(TRUNC(MONTHS_BETWEEN(TO_DATE('20120525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD'))) / 12) num_years
4 ,MOD(TRUNC(MONTHS_BETWEEN(TO_DATE('20120525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD'))), 12) num_months
5 FROM dual
6 /
将产生这个
DIFF_IN_DAYS TRUNC(MONTHS_BETWEEN(TO_DATE(' NUM_YEARS NUM_MONTHS
------------ ------------------------------ ---------- ----------
875 28 2 4