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

SQLで月と日の両方の2つの日付の差を取得します

    select 
      dt1, dt2,
      trunc( months_between(dt2,dt1) ) mths, 
      dt2 - add_months( dt1, trunc(months_between(dt2,dt1)) ) days
    from
    (
        select date '2012-01-01' dt1, date '2012-03-25' dt2 from dual union all
        select date '2012-01-01' dt1, date '2013-01-01' dt2 from dual union all
        select date '2012-01-01' dt1, date '2012-01-01' dt2 from dual union all
        select date '2012-02-28' dt1, date '2012-03-01' dt2 from dual union all
        select date '2013-02-28' dt1, date '2013-03-01' dt2 from dual union all
        select date '2013-02-28' dt1, date '2013-04-01' dt2 from dual union all
        select trunc(sysdate-1)  dt1, sysdate               from dual
    ) sample_data
    

    結果:

    |                        DT1 |                       DT2 | MTHS |     DAYS |
    ----------------------------------------------------------------------------
    |  January, 01 2012 00:00:00 |   March, 25 2012 00:00:00 |    2 |       24 |
    |  January, 01 2012 00:00:00 | January, 01 2013 00:00:00 |   12 |        0 |
    |  January, 01 2012 00:00:00 | January, 01 2012 00:00:00 |    0 |        0 |
    | February, 28 2012 00:00:00 |   March, 01 2012 00:00:00 |    0 |        2 |
    | February, 28 2013 00:00:00 |   March, 01 2013 00:00:00 |    0 |        1 |
    | February, 28 2013 00:00:00 |   April, 01 2013 00:00:00 |    1 |        1 |
    |   August, 14 2013 00:00:00 |  August, 15 2013 05:47:26 |    0 | 1.241273 |
    

    テストへのリンク:SQLFiddle



    1. 警告:mysql_result()は、パラメーター1がリソースであり、ブール値が指定されていることを想定しています。

    2. 時間とステータスの列からステータス値ごとの分にトランザクションデータを正規化します

    3. SQLの2つのテーブルから行のすべての可能な組み合わせを取得する方法

    4. MySQL Orderby a number、Nulls last