Son Haberler
Anasayfa / Yazılım / SQL / SQL’de İç İçe IF ELSE Kullanımı

SQL’de İç İçe IF ELSE Kullanımı

MS SQL’de kouşullu ifadeleri oluştururken karmaşık koşullar sağlamak için IF ELSE bloklarını birbirlerinin içinde oluşturabiliriz. Örneğin günün tarihini kontrol edeceksiniz ve şartınız olarak da bu günün Pazartesi olmadığından emin olmanız gerekiyor diyelim. Yine iç içe IF, ELSE bloğunda BEGIN ve END kullanmak isteğe bağlıdır ama ben kullanılmasını öneririm. Syntax olarak yani söz dizimi olarak kullanışına iki yapıyı örnek vermek istiyorum:

1)

IF koşulumuz BEGIN
durum1
IF koşul BEGIN
durum2
END
END

2)

IF koşul BEGIN
durum1
END
ELSE BEGIN
durum2
IF koşul BEGIN
durum3
[durum4]
END
ELSE durum5
END

gibi yapılarda kullanabiliriz. Tabi görüleceği üzere iç içe koşullu ifadeleri kullandıkça kodlarımız da karmaşıklaşıyor 🙂 Şimdi basit bir örnek ile yazımızı sonlandıralım: (AdventureWorks2012 veri tabanı üzerinde işlem yapıyorum)

DECLARE @Sayi INT; SELECT @Sayi = COUNT(*) FROM Sales.Customer;
IF @Sayi > 300 BEGIN PRINT '300 ün üzerinde veri var';
IF DATEPART(dw, getdate()) = 2 BEGIN
PRINT 'Günlerden Pazartesi';
END;
ELSE BEGIN
PRINT 'Bugün günlerden Pazartesi değil';
END;
END;

Şimdi ben bu kod bloğunda iki durumu kontrol ediyorum ama birinde sadece verinin doğrulanması sonucu PRINT ile ifademi yazdırdım. Sales.Customer tablosu içindeki veri satırlarını kontrol ettim, eğer 300’den fazla ise 300’ün üzerinde veri var yazdırdım. Birde buna ek olarak, koşulumun diğer kısmında tarih kontrol ettirdim. Burada DATEPART komutunu kullanıyorum, daha sonra haftanın hangi günü olduğunu öğreniyorum. Burada 2 demek Pazartesi demek, ben yerel lokal ayarlarımı yapmadığım için haftanın ilk günü Pazar olarak kabul ediliyor. İngilizlerin ağırlığı 🙂 Neyse, kodlarımı bugün yani pazar günü yazdığım için doğal olarak getdate ile geriye 1 dönecek ve koşullardan da ‘Bugün günlerden Pazartesi değil’ yazacak.. Sonuç aynen aşağıdaki gibi. Bir sonraki yazıda görüşmek üzere..

2013082501

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir