Yanıtlar:
DATEDIFF işlevi ne olacak ?
Kılavuzun sayfasından alıntı:
DATEDIFF (), bir tarihten diğerine gün olarak bir değer olarak ifade edilen ifade1 - ifade2'yi döndürür. ifade1 ve ifade2 tarih veya tarih ve saat ifadeleridir. Hesaplamada yalnızca değerlerin tarih bölümleri kullanılır
Sizin durumunuzda şunları kullanırsınız:
mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
| 3 |
+--------------------------------------+
1 row in set (0,00 sec)
Ancak tarihlerin YYYY-MM-DD
, DD-MM-YYYY
yayınladığınız gibi değil olarak yazılması gerektiğini unutmayın .
datediff()
yöntem için ikinci argümandan büyük olmalıdır , aksi takdirde negatif değer döndürür.
2 tarih arasında 24 saat DOLU saymak isterseniz , dateiff sizin için yanlış değerler döndürebilir.
Belgelerin belirttiği gibi:
Hesaplamada yalnızca değerlerin tarih bölümleri kullanılır.
sonuçlanan
select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')
beklenen 0 yerine 1 döndürür.
Çözüm kullanıyor select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
(dateiff'e kıyasla argümanların ters sırasına dikkat edin).
Bazı örnekler:
select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
0 döndürürselect timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
1 döndürürselect timestampdiff(DAY, '2016-04-13 11:00:00', now());
2016-04-13 11:00:00 tarihinden bugüne kadar tam 24 saat geçtiğini döndürür .Umarım birine yardım eder, çünkü ilk başta dateiff'in neden beklenmedik veya yanlış gibi görünen değerleri döndürdüğü çok açık değildir.
datediff()
ve arasında çevrilmesi garip timestampdiff()
.
DATEDIFF()
İşlevi kullanın .
Belgelerden örnek:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
TIMESTAMPDIFF'i tercih ederim, çünkü gerekirse birimi kolayca değiştirebilirsiniz.
Geçerli tarih ile hedef Tarih arasındaki günleri alma
SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;
çıktı
335
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM membership_dates md
çıktı::
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
umarım gelecekte birine yardımcı olur