sql >> データベース >  >> RDS >> Oracle

Oracleを使用して年、月、日で年齢を取得する方法

    Lalitの回答と非常によく似ていますが、add_monthsを使用することで、1か月あたり30日を想定せずに、正確な日数を取得できます。 1か月の合計差で調整するには:

    select sysdate,
      hiredate,
      trunc(months_between(sysdate,hiredate) / 12) as years,
      trunc(months_between(sysdate,hiredate) -
        (trunc(months_between(sysdate,hiredate) / 12) * 12)) as months,
      trunc(sysdate)
        - add_months(hiredate, trunc(months_between(sysdate,hiredate))) as days
    from emp;
    
    SYSDATE    HIREDATE        YEARS     MONTHS       DAYS
    ---------- ---------- ---------- ---------- ----------
    2015-10-26 1980-12-17         34         10          9
    2015-10-26 1981-02-20         34          8          6
    2015-10-26 1981-02-22         34          8          4
    2015-10-26 1981-04-02         34          6         24
    2015-10-26 1981-09-28         34          0         28
    2015-10-26 1981-05-01         34          5         25
    2015-10-26 1981-06-09         34          4         17
    2015-10-26 1982-12-09         32         10         17
    2015-10-26 1981-11-17         33         11          9
    2015-10-26 1981-09-08         34          1         18
    2015-10-26 1983-01-12         32          9         14
    2015-10-26 1981-12-03         33         10         23
    2015-10-26 1981-12-03         33         10         23
    2015-10-26 1982-01-23         33          9          3
    

    計算を逆にすることで確認できます:

    with tmp as (
        select trunc(sysdate) as today,
          hiredate,
          trunc(months_between(sysdate,hiredate) / 12) as years,
          trunc(months_between(sysdate,hiredate) -
            (trunc(months_between(sysdate,hiredate) / 12) * 12)) as months,
          trunc(sysdate)
            - add_months(hiredate, trunc(months_between(sysdate,hiredate))) as days
        from emp
    )
    select * from tmp
    where today != add_months(hiredate, (12 * years) + months) + days;
    
    no rows selected
    


    1. タクシーサービスのデータベースモデル

    2. SQLServerはCSVを複数の行に分割します

    3. Hibernateネイティブクエリ-char(3)列

    4. 非推奨の機能がSQLServerインスタンスでまだ使用されているかどうかを確認する2つの方法