MySQL'de iki tarih arasında belli bir saat aralığındaki verileri dizme

 
MySQL  
865  

Merhaba arkadaşlar.

Bu yazımda MySQL veritabanında iki tarih arasında, belli bir saat aralığındaki verileri çekmek için gerekli olan kod nasıl yazılır bunu anlatacağım.

BETWEEN keyword ile iki tarih arasındaki verileri dizebilirdik, fakat burada saat işin içine girdiğinde o kadar da kolay olmayacak gibi görünüyor.

Mesela 2016-09-05 ve 2016-09-07 tarihleri arası saat 15:00 ile 17:00 arasındaki verileri dizmek istediğimizi varsayalım. 

sql kodu:SELECT * FROM tablo WHERE tarih BETWEEN '2016-09-05 15:00' AND 2016-09-07 17:00

Yukarıdaki kod şeklinde yazarsak bize sadece 2016-09-05 tarihi saat 15:00'dan ihtibaren 2016-09-07 tarihi saat 17:00'a kadar olan verileri dizecektir. Yani burada 2016-09-06 18:23 gibi tarihli bir veriyide dizecektir. Oysa bizim istediğimiz şey 5 ve 7 Eylül 2016 tarihleri arasındaki verilerin 15:00-17:00 saatleri olan verileri listelemekti.

İşte bunu şu şekilde yapıyoruz:

sql kodu:SELECT * FROM tablo WHERE DATE(tarih) >= '2016-09-05' AND DATE(tarih) <= '2016-09-07' AND DATE_FORMAT(tarih,'%T') >= '15:00:00' AND DATE_FORMAT(tarih,'%T') <= '17:00:00'

Not: yukarıdaki koda alternatif olarak DATE fonksiyonları kullanmak yerine LIKE özelliğini kullanabilirdik belki fakat, LIKE kullanmak performans açısından iyi bir terchil olmayacağından tercih etmemeliyiz. Zaten LIKE özelliğini zorunlu olmadıkça kullanmaktan kaçınmalıyız.