SQL'de Datetime nesnesinden yalnızca date almak
July 24, 2008 at 1:58 PM
—
oozturk
Veritabanı uygulamalarında genelde tarih aralığında sorgu yapılması gerekir. Toplanmış olan verilerin anlamlı halde raporlanması ya da başka amaçlarla kullanmak amacıyla; "bugün yapılan satışların toplamı" ya da "bugün içerisinde giriş yapan kullanıcıların sayısı" gibi bilgiler hazırlanması gerekebilir. SQL kullanıyorsanız ve kullanıcılarınızın bölgesel ayarları kontrolünüz altında değil ise nvarchar'a çevirip istenilen yeri almak da kullanışsız olur çünkü karşılaştırılacak bilgi (yani veritabanında kayıtlı olan bilgiler) hala datetime tipinde saklıdır. Yani elinizdeki bilginin datetime tipinde olması gerekebilir, bu durumlarda aşağıdaki komutu kullanmak daha akıllıca oluyor.
select cast(floor(cast(getdate() as float)) as datetime)
Bu komut ile datetime tipindeki nesneden yalnızca date alınabilir. getdate() yazan yere değişkeninizi ya da kullanmak istediğiniz değer her ne ise onu (datetime tipinde olması koşuluyla) yazarak aynı işlemi yapabilirsiniz.
aslında başka türlü yollarda var aşağıda bir örnek daha verelim,
select cast(cast(getdate() as int) as datetime)
Ama bu komutla günün ilk ve son zamanlarını kaçırma ihtimaliniz var. Önceki örnekte kullandığımız floor komutu sayesinde float cinsine çevirdiğimiz datetime değerimizde istenilen durumlarda yuvarlama yapılırken bu örnekte int cinsine çevirerek bu yuvarlamayı imkansız hale getirmiş oluyoruz çünkü.
Ben şahsen ilk verdiğim örneği kullanıyorum çünkü hem diğer örneklere göre çok daha hızlı çalışıyor (büyük sistemlerde sürekli çalışan sorgular ciddi yük oluşturuyorlar, bu sebeple bir sorgunun daha efektif olması cidden önem taşıyor) hem de bilgisayara verdiği yük çok daha az oluyor.
Eh, böyle işte...
f39a24e5-2fb2-4c96-9c0a-5b6fec260c50|1|5.0
Posted in: MSSQL
Tags: