AdventureWorks veritabanında, Production.Product tablsoundaki ürünlerin adlarını ve renklerini getirelim. Eğer renk bilgisi null ise  ‘Renksiz’ yazsın. Bu amacımızı gerçekleştirmek için ISNULL fonksiyonundan yararlanacağız. Vereceğimiz ilk parametre Null kontrolü yapılacak olan değer, ikinci parametre ise ilk parametrenin Null olması durumunda yerine geçecek değerdir.

SELECT Name,ISNULL(Color,'Renksiz') [Renk] FROM Production.Product

Ekran çıktımız şu şekilde olacaktır.

Untitled

İstediğimiz sonucu almış durumdayız. Şimdi de Person.Address tablosundaki AddressLine1 bilgisini ve AddressLine2 kolonundaki bilgilerin ilk 10 hanesini çekelim. Eğer AddressLine2 kolonu null ise ‘Adres Bilgisi Girilmemiş’ yazsın.

SELECT AddressLine1,ISNULL(LEFT(AddressLine2,10),'Adres Bilgisi Girilmemiş') FROM Person.Address

Ekran çıktımız şu şekilde olacaktır.

Untitled2

Burada ufak bir sorunla karşı karşıyayız. 11.satır haricindeki diğer tüm satırlarda adres bilgisinin null olduğunu, ve bu sebepten dolayı ‘Adres bilgisi girilmemiş’ yazdığını görebiliyoruz. Ancak null olması durumunda yazılması gereken metnin tam olarak yazılmadığını görüyoruz. Sadece ilk 10 hanesi yazılmış durumda. Bunun sebebi; ISNULL fonksiyonununun, yerine geçeceği değişkenin tipini aynen uygulamasıdr. Bu örnek için ISNULL fonksiyonuna parametre olarak AdressLine2 kolonunun ilk 10 hanesini verdiğimiz için, yazmış olduğumuz ‘Adres Bilgisi Girilmemiş’ metninin de ilk 10 hanesini elde etmiş olduk.

Bu sorunu gidermek için yine ISNULL ile aynı işi yapan COALESCE fonksiyonunu kullanmalıyız.

SELECT AddressLine1,COALESCE(LEFT(AddressLine2,10),'Adres Bilgisi Girilmemiş') [AdressLine2] FROM Person.Address

Yukarıdaki kod parçası çalıştırıldığında istediğimiz sonucu elde etmiş olacağız.

Untitled3



2 yorum:

Adsız dedi ki...

Merhaba;

Sql CE sürümünde;

COALESCE(COUNT(errors.userID),0) AS HataSayisi şeklinde bir sorguyla Coalesce içinde count kullanıyorum ama Null olan kayıtlara 0 göstermek yerine, hiç göstermiyor o kayıtları. Fikriniz varmıdır acaba?

Onur Salkaya dedi ki...

Merhaba,

Bu şekilde yorum yapmak zor malesef. Ancak COUNT kullandığınızdan ötürü ilgili blok en kötü 0 değerini üretecektir bu görüntü ile. Normal şartlarda istediğinizi yapmak için coalesce'e ihtiyacınız yok gibi duruyor.

Yorum Gönder