Mysql ile iki tarih arasındaki farkı bulmak

Tarih: 09 Mart 2013 Kategori: Mysql 6 Yorum

mysql-tarihMysql’de iki tarih arasındaki farkı bulmak için datediff() ve timediff() fonksiyonlarını kullanabiliriz. Bu fonksiyonlar iki parametre alır. Bu parametreler date ya da datetime formatında olmalıdır. Fonksiyon birinci tarihten ikinci tarihi çıkartarak aradaki tarih farkını döndürür. İkinci tarih birinci tarihten büyükse eksi sonuç döner (- 10 gibi). Basit bir örnek yapalım.

Gün farklarını bulmak

select datediff('2012-01-30','2012-01-20');

Bu sql sorgusunun sonucu 10 olacaktır. Eğer küçük olan tarihten büyük olan tarihi çıkartırsak:

select datediff('2012-01-20','2012-01-30');

Sorgu sonucu -10 döndürür. Belirli bir tarih ile şu anki tarih arasındaki farkı bulmak istersek eğer, şu yazımızda açıkladığımız curdate() fonksiyonundan yararlanabiliriz.

select datediff(curdate(),'2012-01-10');

Ben bu yazıyı yazarken tarih 16 Ocak 2012 olduğundan, sorgu 6 sonucunu döndürmüştür.

İki tarih sütunu arasındaki tarih farkını bulmak

Select datediff(tarih1,tarih2) as tarihfark from zaman;

Bu sorgu zaman tablosundaki tarih1 ve tarih2 sütunları arasındaki farkı tarihfark takma isminde depolar.

Tarihler arasındaki saat, dakika ve saniye farkını bulmak

Bu işlem için timediff() fonksiyonu kullanılır. Bu fonksiyon datediff() fonksiyonuyla aynı şekilde çalışır. Fakat geriye döndürdüğü sonuç saat:dakika:saniye formatındadır.

select timediff('2012-01-18 20:00:00','2012-01-18 19:00:00');

Yukarıdaki sorgu 01:00:00 sonucunu döndürür. Tarihlerin datetime tipinde olduğuna da dikkatinizi çekerim.

Timediff() fonksiyonu iki tarih arasındaki farkı saat cinsinden döndürür demiştik. Eğer iki tarih arasında gün farkı varsa sonuç yine saat olarak dönecektir. Sorgu sonucunda 2 gün timediff fonksiyonu için 48 saat demektir.

select timediff('2012-01-20 20:00:00', '2012-01-18 19:15:00');

Bu sorgunun çıktısı 48:45:00 olacaktır. 48 saat, 45 dakika, 00 saniye. Şu anki zaman ile belirli bir tarih arasındaki saat farkını bulmak için Mysql’in now() fonksiyonu kullanılabilir. Bu fonksiyon curdate() fonksiyonu gibi çalışır. Fakat tarihi datetime tipinde döndürür.

select timediff(now(),'2012-01-15 19:15:00');

Sorgunun çıktısı 06:26:07 olacaktır.

Umarım konuyu eksiksiz anlatabilmişimdir. İyi çalışmalar.

6 Yorum

Yorum Yapın
  • ahmet Cevapla

    tam aradığım bilgiydi. Güzel anlatmışsınız. teşekürler

  • altayalp Cevapla

    Yorumunuz için teşekkürler.

  • Alpaslan Cevapla

    Selamlar.
    postla gelen iki ayrı tarihi aralığını sql de bu tarih araliğina uyan tarih aralıkları varsa listeletmek istiyorum ama bi türlü başaramadım. Yardımcı olurmusunuz.
    tam olarak istediğim postala gelen tarih aralığına sql deki tarihler çakışıyorsa bunları listelemek.
    Yardımcı olursanız Çok Teşekkur ederim.
    postla gelen giris 2014-12-22 – cikis 2014-12-24

    Seklinde yapinca 704 ve 707 yi getiriyor aslında sadece 707 yi yazdirmasi gerekiyor.

    Mysql veri tabanindaki kayit asagidaki gibidir.
    no giris cikis
    704 2014-12-21 2014-12-23
    706 2014-12-22 2014-12-25
    707 2014-12-20 2014-12-21
    705 2014-12-19 2014-12-24

  • Alpaslan Cevapla

    Mysql sorgusu asagidaki gibidir.

    $giris=$_POST[“input”];
    $cikis=$_POST[“output”];

    $sql=”select * from $tablename where (‘$giris’ BETWEEN giris AND cikis) AND (‘$cikis’ BETWEEN giris AND cikis)”;
    $sorgu=mysql_query(“$sql”);
    while ($sonuc=@mysql_fetch_array($sorgu)){
    echo “$sonuc[4]”;
    }

    • altayalp Cevapla

      Merhaba “select * from tablo where tarih between ‘” . $giris . “‘ and ‘” . $cikis . “‘” gibi bir sorguyla yapabilirsiniz.

  • Alpaslan Cevapla

    Selamlar.
    Çözdüm çok teşekkür ederim. Çok basit bir fonksiyonmuş aslında. Belki birinin işine yarayabilir.

    $giris=$_POST[“input”];
    $cikis=$_POST[“output”];
    $a=$giris;
    $b=$cikis;

    $sql=”select * from $tablename”;
    $sorgu=mysql_query(“$sql”);
    while ($sonuc=mysql_fetch_array($sorgu)){
    $x=”$sonuc[4]”;
    $y=”$sonuc[5]”;
    }
    if($x=$a){
    echo “1”;
    }
    elseif($x<$a && $y<$a){
    echo"0";
    }
    elseif($x$a){
    echo”1″;
    }
    elseif($x>$a && $x>$b){
    echo”0″;
    }
    elseif($x>$a && $x<$b){
    echo"1";
    }
    elseif($x=$b){
    echo"0";
    }