Merhaba Arkadaşlar,
Önceki yazımda MSSQL 2012 ile gelen tarih ve zaman fonksiyonlarından bahsetmiştim. Bu yazımda ise CHOOSE ve IIF mantıksal fonksiyonlarından bahsedeceğim.
CHOOSE Fonksiyonu
Tanım: Parametre olarak bir dizi değer ve pozisyon verilir. Gösterilen pozisyondaki değeri döndürür.
Söz Dizimi: CHOOSE([Pozisyon], [Değer 1], [Değer 2], …[Değer N])
Pozisyon olarak ondalıklı sayı verilmesi durumunda int gibi işlem görür.
Örnek Kullanımı:
SELECT CHOOSE(1,’Mahmut Can’,’Sözeri’) => Mahmut Can
SELECT CHOOSE(6,10,20,30,40,50,60,70,80,90,100) => 60
SELECT CHOOSE(2.1,’Mahmut’, ‘Can’,’Sözeri’) => Can
Dikkat:
- Pozisyon numarası verilen değerlerin adetinden büyükse,
- Pozisyon numarası 0 ise veya 1 ise,
geriye Null döndürür.
IIF Fonksiyonu
Tanım: IF..ELSE yazımına zaten T-SQL’de alışığız. Belirtilen Boolean bir koşulun sonucuna göre geriye değer döndüren fonksiyondur. Case yapısının kısa hali diyebiliriz.
Söz Dizimi: IIF([Boolean Koşul],[Doğru Değer],[Yanlış Değer])
Örnek Kullanım:
SELECT IIF(10=10,’Eşit’,’Eşit Değil’) => OK
—
DECLARE @Sayi int =5, @Sayi2 int = 7
SELECT Sonuc=IIF(@Sayi>@Sayi2,’Sayi 1, Sayi 2”den büyüktür.’,IIF(@Sayi2>@Sayi,’Sayi 2, Sayi 1”den büyüktür’,’Sayılar eşittir’))
Sonuc => Sayi 2, Sayi 1’den büyüktür
—
–Hatalı Null kullanımı
SELECT IIF(‘a’ > ‘b’, Null,Null)–Null döndürmek için
DECLARE @null sql_variant
SELECT IIF(‘a’ = ‘b’, @null, @null)Sonuç => NULL
Performans:
Aslında yazdığınız kod arka planda Excetuion Plan’dan bakarsanız Case statement’a çevirip o şekilde çalıştırıyor. Milisaniyeler cinsinden olsada bir performans kaybı söz konusu
Bir sonraki yazımda yeni bir özelliği ile devam edeceğiz.
İyi çalışmalar
#1 by Erhan on March 4, 2012 - 6:43 pm
İf bir fonksiyon degildir.
#2 by Mahmut Can Sözeri on March 4, 2012 - 9:35 pm
Öncelikli olarak IF’i doğru yazmalısınız. Ayrıca haklısınız IF bir fonksiyon değil. Fakat IIF, MSSQL 2012 ile gelen mantıksal bir fonksiyondur.
Detaylı bilgi için: http://msdn.microsoft.com/en-us/library/hh213574(v=sql.110).aspx