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

2つの異なる日付から年の違いを取得するにはどうすればよいですか?

    うるう年にも対応する表現は次のとおりです。

    YEAR(date1) - YEAR(date2) - (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d'))
    

    これが機能するのは、式(DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d')) trueです date1がdate2より「年の早い」場合および mysqlでは、true = 1 およびfalse = 0 、したがって、調整は単に比較の「真実」を差し引くだけの問題です。

    これにより、テスト#3を除いて、テストケースの正しい値が得られます。テスト#1と一致させるには、「3」にする必要があると思います。

    create table so7749639 (date1 date, date2 date);
    insert into so7749639 values
    ('2011-07-20', '2011-07-18'),
    ('2011-07-20', '2010-07-20'),
    ('2011-06-15', '2008-04-11'),
    ('2011-06-11', '2001-10-11'),
    ('2007-07-20', '2004-07-20');
    select date1, date2,
    YEAR(date1) - YEAR(date2)
        - (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d')) as diff_years
    from so7749639;
    

    出力:

    +------------+------------+------------+
    | date1      | date2      | diff_years |
    +------------+------------+------------+
    | 2011-07-20 | 2011-07-18 |          0 |
    | 2011-07-20 | 2010-07-20 |          1 |
    | 2011-06-15 | 2008-04-11 |          3 |
    | 2011-06-11 | 2001-10-11 |          9 |
    | 2007-07-20 | 2004-07-20 |          3 |
    +------------+------------+------------+
    

    SQLFiddle を参照してください。



    1. Postgres/PostgreSQLテーブルとそのインデックスのディスクサイズをどのように見つけますか

    2. Sqliteが2番目のテーブルにデータを挿入していません

    3. 2列の選択で1列の重複する値を削除します

    4. FROM句で更新対象のテーブルを指定することはできません