-1

2 つの日付の違いについてお聞きしたいのですが、誕生日の確認に年は考慮されていません。2 つの日付を確認するクエリが見つかり、その年が考慮されます。

例えば、

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

前もって感謝します..

4

2 に答える 2

2

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 がコメントで指摘したように、うるう年で何が起こるかを定義するか、少なくとも理解し、受け入れる必要があります。このアプローチは巧妙なことは何もしませんが、あなたがしていることには十分かもしれません。

于 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 に答える