Jawaban:
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-YYYY
seperti yang Anda posting.
datediff()
metode, jika tidak maka akan menghasilkan nilai negatif.
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 0select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
mengembalikan 1select 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.
datediff()
dan timestampdiff()
.
Gunakan DATEDIFF()
fungsinya.
Contoh dari dokumentasi:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
Saya lebih suka TIMESTAMPDIFF karena Anda dapat dengan mudah mengubah unit jika perlu.
Dapatkan hari antara tanggal Saat ini dengan Tanggal tujuan
SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;
keluaran
335
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