MySQL'de iki tarih arasındaki farkın gün sayısını nasıl alabilirim?


162

MySQL birkaç tarih içinde yer alan gün sayısını almak gerekir.

Örneğin:

  • Giriş tarihi: 12-04-2010
  • Tarihi kontrol et 15-04-2010

Gün farkı 3 olurdu

Yanıtlar:


262

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-YYYYyayınladığınız gibi değil olarak yazılması gerektiğini unutmayın .


evet soruyu yaptığımda tarih formatını unuttum; p teşekkür ederim
Audel

4
PS YYYY-AA-GG ISO 8601 standardıdır, bu yüzden herkes bunu kullanmalıdır. Çok pratik.
Ernestas Stankevičius

4
Not : İlk argüman datediff()yöntem için ikinci argümandan büyük olmalıdır , aksi takdirde negatif değer döndürür.
Shashanth

38

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ür
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); 1 döndürür
  • select 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.


argümanların datediff()ve arasında çevrilmesi garip timestampdiff().
billynoah



5

Geçerli tarih ile hedef Tarih arasındaki günleri alma

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

çıktı

günler

 335

2
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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.