25
“BETWEEN deyimi ile tarih aralığı sorgulama…”
Posted by Zafer | Posted in SQL | Posted on 25-11-2008
İki tarih arasındaki verileri sorgulamak için BETWEEN deyiminden yararlanabiliriz. Bu konuda aklımıza takılan soru genelde başlangıç ve bitiş tarihlerinin yani sınır şartlarınında değerlerdirmeye alınıp alınmadığıdır. BETWEEN ile ilgili sorgularımızda sınırdaki şatlar da değerlendirilir. Fakat bazen tarih aralığını sorgulayan bir fonksiyon ve ya sorgu yazdığımızda sınır şartlarının koşula dahil edilmediğini ve kullandığımız deyimin ya da sorgunun yanlış olduğunu düşünürüz. Fakat sorgumuz ve deyimimiz genelde dogrudur sadece biraz eksiktir. Genelde yaptığımız hatayı bir örnek ile göstermek istiyorum ;
Doğru ama eksik :
-
CREATE FUNCTION [tarihSorgula] (@baslangicTarih datetime,@bitisTarih datetime)
-
RETURNS TABLE AS RETURN
-
(
-
SELECT … FROM …. WHERE tarih BETWEEN tarih @baslangicTarih AND @bitisTarih
-
)
*** Karşılaşabileceğimiz sorun : Tarih değişkenlerimiz datetime tipinde olduğu için kullandığımız tarihler
“10.10.2008 12:12:20″ benzeri (kullandığımız tarih formatına göre işaret ve veriler değişebilir) şekildedir. Eğerki sorgulama işlemlerimizde saat kısmını dikkate almazsaz sorgu sonucunda gelecek verilerimiz muhtemelen eksik olacaktır. Diyelimki son iki güne ait verileri sorgulamak istiyoruz ;
-
SELECT * FROM [tarihSorgula] (‘24.11.2008′,‘25.11.2008′) –(table tipindeki bir fonksiyon)
şeklinde tarihleri fonksiyona gönderdiğimizde sadece ‘24.11.2008′ tarihine ait veriler karşımıza gelecektir. Çünkü sistem tarih değerlerimizi ‘24.11.2008 00:00:00′ , ‘25.11.2008 00:00:00′ şeklinde alğılayacaktır. Bu nedenle iki günlük yerine sadece bir günlük bir sorgulama sonucu dönecektir. Gerçek sorgumuzdaki tarih değerleri ise ‘24.11.2008 00:00:00′ , ‘25.11.2008 23:59:59′ şeklinde olması gerekir. Tarih değerlerimizi bu hale getirmek için ise bir kaç farklı yöntem mevcuttur. Bunlardan bitanesi ;
-
CAST(CAST(CONVERT(VARCHAR,@bitisTarih,105) AS VARCHAR(10))+‘ 23:59:59′ AS DATETIME)
şeklindedir. Benzer şekilde tarih değerlerini isteğimiz formata dönüştürebiliriz . Önemli olan sorgularımızda saat kısmınıda dikkate almamız gereğidir.
