Bagaimana cara mendapatkan perbedaan jumlah hari antara dua tanggal di mysql?

162

Saya perlu mendapatkan jumlah hari yang terkandung dalam beberapa tanggal di MySQL.

Sebagai contoh:

  • Tanggal check-in adalah 12-04-2010
  • Tanggal keluar 15-04-2010

Perbedaan hari adalah 3

Audel
sumber

Jawaban:

261

Bagaimana dengan fungsi DATEDIFF ?

Mengutip halaman manual:

DATEDIFF () mengembalikan expr1 - expr2 yang dinyatakan sebagai nilai dalam beberapa hari dari satu tanggal ke yang lain. expr1 dan expr2 adalah ekspresi tanggal atau tanggal dan waktu. Hanya bagian tanggal dari nilai yang digunakan dalam perhitungan


Dalam kasus Anda, Anda akan menggunakan:

mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
|                                    3 | 
+--------------------------------------+
1 row in set (0,00 sec)

Tetapi perhatikan tanggal harus ditulis sebagai YYYY-MM-DD, dan tidak DD-MM-YYYYseperti yang Anda posting.

Pascal MARTIN
sumber
ya saya lupa tentang format tanggal ketika saya mengajukan pertanyaan; terima kasih
Audel
4
PS YYYY-MM-DD adalah standar ISO 8601, jadi semua orang harus menggunakan ini. Sangat praktis.
Ernestas Stankevičius
4
Catatan : Argumen pertama harus lebih besar dari argumen kedua untuk datediff()metode, jika tidak maka akan menghasilkan nilai negatif.
Shashanth
38

Catatan jika Anda ingin menghitung 24 jam LENGKAP antara 2 tanggal, Dateiff dapat mengembalikan nilai yang salah untuk Anda.

Seperti yang dinyatakan oleh dokumentasi:

Hanya bagian tanggal dari nilai yang digunakan dalam perhitungan.

yang mengakibatkan

select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')

mengembalikan 1 bukannya yang diharapkan 0.

Solusi menggunakan select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (perhatikan urutan argumen yang berlawanan dibandingkan dengan Dateiff).

Beberapa contoh:

  • select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); mengembalikan 0
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); mengembalikan 1
  • select timestampdiff(DAY, '2016-04-13 11:00:00', now()); mengembalikan berapa hari penuh 24 jam telah berlalu sejak 2016-04-13 11:00:00 sampai sekarang .

Berharap itu akan membantu seseorang, karena pada awalnya tidak terlalu jelas mengapa Dateiff mengembalikan nilai yang tampaknya tidak terduga atau salah.

Konrad Gałęzowski
sumber
aneh bahwa argumen dibalik antara datediff()dan timestampdiff().
billynoah
17

Gunakan DATEDIFF()fungsinya.

Contoh dari dokumentasi:

SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
    -> 1
Tobias Cohen
sumber
6

Saya lebih suka TIMESTAMPDIFF karena Anda dapat dengan mudah mengubah unit jika perlu.

theblang
sumber
5

Dapatkan hari antara tanggal Saat ini dengan Tanggal tujuan

 SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;

keluaran

hari

 335
vijayabalan
sumber
2
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM  membership_dates md

keluaran::

id  entity_id    start_date            end_date             days

1   1236      2018-01-16 00:00:00     2018-08-31 00:00:00    227
2   2876      2015-06-26 00:00:00     2019-06-30 00:00:00   1465
3   3880      1990-06-05 00:00:00     2018-07-04 00:00:00   10256
4   3882      1993-07-05 00:00:00     2018-07-04 00:00:00   9130

Semoga ini bisa membantu seseorang di masa depan

Pengembang
sumber