我想问一下两个日期之间的区别,它不考虑检查生日的年份。我找到查询来检查两个日期并考虑年份。
例如,
SELECT to_date(SYSDATE,'DD-MM-YYYY') - to_date(dateofbirth,'DD-MM-YYYY')
FROM employees;
提前致谢..
一种简单的方法是使用DDD
格式模型查看一年中日期的序数:
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 在评论中指出的那样,您需要定义或至少理解并接受闰年会发生什么。这种方法没有做任何聪明的事情,但对于您正在做的任何事情都可能足够好。
你应该试试这个
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