복붙노트

[SQL] 어떻게 두 개의 서로 다른 날짜에서 년의 차이를 얻으려면?

SQL

어떻게 두 개의 서로 다른 날짜에서 년의 차이를 얻으려면?

나는 MySQL 데이터베이스를 사용하여 두 개의 다른 날짜에서 년의 차이를 싶어.

예를 들어 :

어떻게 SQL 구문에 대한? 거기에 어떤 결과를 생산하기 위해 MySQL의에서 기능이 내장되어 있습니까?

해결법

  1. ==============================

    1.여기에 또한 윤년를 충족시켜 표현이다 :

    여기에 또한 윤년를 충족시켜 표현이다 :

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

    날짜 1은 진정한 = MySQL은 날짜 2보다 때문에 "연초"인 경우,이 발현하기 때문에 작업 (DATE_FORMAT (날짜 1은 '%의 m %의 D')

    이 테스트 # 3를 제외하고, 테스트 케이스에 대한 올바른 값을 제공합니다 - 나는 그것을 "3"해야한다고 생각 테스트 # 1과 일치하도록 :

    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

  2. ==============================

    2.나는 TIMESTAMPDIFF 사용에 대한 보헤미안하여 솔루션,하지만 좋아

    나는 TIMESTAMPDIFF 사용에 대한 보헤미안하여 솔루션,하지만 좋아

    select date1, date2,timestampdiff(YEAR,date2,date1) from so7749639
    

    sqlfiddle

    더욱 쉬워 보인다.

  3. ==============================

    3.

    mysql> SELECT FLOOR(DATEDIFF('2011-06-11','2001-10-11')/365);
    +------------------------------------------------+
    | FLOOR(DATEDIFF('2011-06-11','2001-10-11')/365) |
    +------------------------------------------------+
    |                                              9 |
    +------------------------------------------------+
    1 row in set (0.00 sec)
    

    DATEDIFF ()는 두 날짜 사이의 일의 차이를 반환합니다. 이것은 특히 계정으로 윤년을 고려하지 않고 그러한 경우에 작동 할 수 있습니다 :

    mysql> SELECT FLOOR(DATEDIFF('2007-07-11','2004-07-11')/365);
    +------------------------------------------------+
    | FLOOR(DATEDIFF('2007-07-11','2004-07-11')/365) |
    +------------------------------------------------+
    |                                              3 |
    +------------------------------------------------+
    1 row in set (0.00 sec)
    
  4. ==============================

    4.간단히의 : 테이블에서 차이 AS SELECT TIMESTAMPDIFF (년, 날짜 1, 날짜 2).

    간단히의 : 테이블에서 차이 AS SELECT TIMESTAMPDIFF (년, 날짜 1, 날짜 2).

  5. ==============================

    5.당신은 사용할 수 있습니다

    당신은 사용할 수 있습니다

    SELECT ROUND((TO_DAYS(date2) - TO_DAYS(date1)) / 365) ...
    

    또한 ABS () 당신은 항상 양수, 날짜 선행 다른 상관없이 원하는 경우에 그것을 포장.

    대신 당신은 단지 전체 년을 계산하려면 라운드 (), 0.6 년, 1 년으로 간주됩니다, 당신은 FLOOR ()을 사용할 수 있습니다. 이 경우 0.6 년 0 년으로 간주되며, 1.9 년 1 년 간주됩니다.

  6. ==============================

    6.날짜 1과 날짜 2 년 사이의 수 :

    날짜 1과 날짜 2 년 사이의 수 :

    IF((YEAR(date2) - YEAR(date1)) > 0, (YEAR(date2) - YEAR(date1)) - (MID(date2, 6, 5) < 
    MID(date1, 6, 5)), IF((YEAR(date2) - YEAR(date1)) < 0, (YEAR(date2) - YEAR(date1)) + 
    (MID(date1, 6, 5) < MID(date2, 6, 5)), (YEAR(date2) - YEAR(date1))))
    

    이제 이들에 대한 몇 가지 의견.

  7. ==============================

    7.이 윤년에 대한 계정에 복용, 잘 작동합니다 :

    이 윤년에 대한 계정에 복용, 잘 작동합니다 :

    select floor((cast(date_format('2016-02-14','%Y%m%d') as int) - cast(date_format('1966-02-15','%Y%m%d') as int)/10000);
    

    소수가 대부분의 시간을 잘못 될 것 같은 바닥을 유지합니다.

  8. from https://stackoverflow.com/questions/7749639/how-to-get-the-difference-in-years-from-two-different-dates by cc-by-sa and MIT license