22 Ekim 2011 Cumartesi

DateDiff Fonksiyonu Üzerinde Şaşırtıcı Bir Uygulama

Aşağıdaki sorguyu çalıştırdığınızda sonucun 3 olmasını beklerken 1 olarak aldığınızda bunun bir hata (bug) olduğunu düşünebilirsiniz:

SELECT DATEDIFF(MI,'2011-10-14 02:18:58' '2011-10-14 02:19:01'AS MIN_DIFF



Ancak bu bir BUG değildir.

Bir miktar daha ayrıntılı anlatayım. Siz SQL Server'dan zaman farkını dakika olarak göstermesini istediğinizde, saat, saniye, v.s. gibi geri kalan tüm alanları yok sayar. Bu durumda diğer tüm farkları göz ardı ettiğimizden sonucu 1 olarak bize yorumlar.



DATE_DIFF fonksiyonunun nasıl çalıştığını daha iyi anlamaya çalışalım:
SELECT DATEDIFF(YEAR,'2011-12-31 23:59:59 ' '2012-01-01 00:00:00'AS YEAR_DIFF





Eğer saniyeler arasındaki farkı öğrenmek istiyorsanız, duruma biraz daha farklı yaklaşmanız gerekir. İlk örnekte yapmamız gereken doğru şey önce aradaki farkı saniye cinsinden bulmak ve sonucu 60'a bölerek dakikaya çevirmek olmalıydı.


SELECT DATEDIFF(second,'2011-10-14 02:18:58' '2011-10-14 02:19:01')/60.0 AS MIN_DIFF





Böylece aradaki dakika farkını tam olarak bulmuş olduk.

Hiç yorum yok:

Yorum Gönder