Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получите разликата в годините от две различни дати?

Ето израза, който също обслужва високосните години:

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 ако дата 1 е "по-рано през годината", отколкото дата 2 и защото в mysql, true = 1 и false = 0 , така че корекцията е просто въпрос на изваждане на "истината" на сравнението.

Това дава правилните стойности за вашите тестови случаи, с изключение на тест №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 |
+------------+------------+------------+

Вижте SQLPiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL заявка ГРУПА ПО ден/месец/година

  2. Как да съхранявате името на файла в базата данни, с друга информация, докато качвате изображение на сървър с помощта на PHP?

  3. MySQL - Как да изберете данни по дължина на низа

  4. Инсталирайте MySQL на Ubuntu без подкана за парола

  5. mysql динамична заявка в съхранена процедура