2 つの日付の違いについてお聞きしたいのですが、誕生日の確認に年は考慮されていません。2 つの日付を確認するクエリが見つかり、その年が考慮されます。
例えば、
SELECT to_date(SYSDATE,'DD-MM-YYYY') - to_date(dateofbirth,'DD-MM-YYYY')
FROM employees;
前もって感謝します..
DDD
単純なアプローチの 1 つは、フォーマット モデルを使用して、年内の日付の序数を調べることです。
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