Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mendapatkan perbedaan tahun dari dua tanggal yang berbeda?

Berikut ungkapan yang juga berlaku untuk tahun kabisat:

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

Ini berfungsi karena ekspresi (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d')) apakah true jika date1 "lebih awal di tahun ini" daripada date2 dan karena di mysql, true = 1 dan false = 0 , jadi penyesuaian hanyalah masalah mengurangi "kebenaran" dari perbandingan.

Ini memberikan nilai yang benar untuk kasus pengujian Anda, kecuali untuk pengujian #3 - Saya pikir itu harus "3" agar konsisten dengan pengujian #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;

Keluaran:

+------------+------------+------------+
| 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 |
+------------+------------+------------+

Lihat SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kerangka Ketersediaan Tinggi MySQL Dijelaskan – Bagian I:Pendahuluan

  2. Bagaimana Fungsi TRIM() Bekerja di MySQL

  3. Hak istimewa pengguna MySQL di server bersama

  4. Batas kondisi MySQL IN

  5. Tambahkan 2 jam ke waktu saat ini di MySQL?