-1

我想问一下两个日期之间的区别,它不考虑检查生日的年份。我找到查询来检查两个日期并考虑年份。

例如,

   SELECT to_date(SYSDATE,'DD-MM-YYYY') - to_date(dateofbirth,'DD-MM-YYYY')
   FROM employees;

提前致谢..

4

2 回答 2

2

一种简单的方法是使用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 在评论中指出的那样,您需要定义或至少理解并接受闰年会发生什么。这种方法没有做任何聪明的事情,但对于您正在做的任何事情都可能足够好。

于 2013-04-17T07:35:27.363 回答
1

你应该试试这个

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

资源

于 2013-04-17T06:18:31.527 回答