Sayfalar

20 Aralık 2016 Salı

SQL Server 2012 ile Gelen Yeni T-SQL Fonksiyonları


SQL Server 2012 ile Gelen Yeni T-SQL Fonksiyonları

30.01.2012 00:00:00


Önümüzdeki aylarda piyasaya sürülmeye hazırlanan SQL Server 2012'de birazcık .NET tadı almaya hazır mısınız? TRY_PARSE, FORMAT, TRY_CONVERT... Şayet bir .NET Developer iseniz, bu fonksiyonların bir kısmı size hiç de yabancı gelmeyecek.

Operatör ile ilgili Fonkisyonlar
CONCAT Fonksiyonu ile Metinleri Ulamak

CONCAT fonksiyonu, SQL Server 2012 ile gelen bir fonksiyon olup, String ifadeleri uç uca eklemede + operatörüne göre bazı avantajlar sağlamaktadır. Örneğin, tip dönüşümlerine gerek duymaz ve NULL bir değer ulamaya katıldığında boşluk olarak eklenir. Bütün sonucu NULL haline getirmesine müsade edilmez. MySQL veritabanı yönetim sistemindeki CONCAT fonkisyonuna çok benzer. Genel kullanımı şu şekildedir.CONCAT(sutun1,sutun2,[sutun3, ......, sutunN])


Örnek:

Yukarıdaki örneği tekrarlayacak olursak:SELECT CONCAT(name , ' $', listPrice) FROM production.Product ORDER BY listPrice DESC




Şekil-1: CONCAT fonksiyonu ile değerler veri tipleri önemli olmaksızın VARCHAR tipler olarak uç uca eklenir.
IIF Fonksiyonu:

IF yapısı, bir SELECT cümlesi içerisinde bir çok sütun üstünde kullanmak gerektiğinde tercih edilebilir.

Örnek:

tblUrun tablosundaki ürünlerin Liste Fiyatı 1000'den pahalı ise 'pahalı', daha küçük veya eşitse de 'ucuz' etiketi ile bir fiyat yorumu sütunu oluşturalım:SELECT urunKod,listeFiyat, IIF(listeFiyat>1000,'pahalı', 'ucuz') AS fiyatYorum FROM tblUrun




Şekil: IIF fonksiyonunun kullanımı
CHOOSE Fonksiyonu:

T-SQL'de CASE ile yapılabilecek bazı ufak işlemlerin yerine kullanılanılabilir ama kısıtlı bir kullanımı mevcut. Sadece, indeks sütununda geçen sayının yer aldığı elemanı döndürebilen bir fonksiyon olup oldukça düşük bir işlev sunmakta.

Örnek: DECLARE @indis INT=0 WHILE @indis<5 BEGIN SET @indis +=1; SELECT CHOOSE( @indis,'bir','iki','üç','dört','beş','altı'); END;




Şekil 3: CHOOSE fonksiyonu pek esnek olmasa da ardışık giden sayıların bir dize değer ile değiştirilmesine müsaade etmekte.
Dönüşüm ve Formatlandırma ile İlgili Fonkisyonlar
TRY_CONVERT Fonksiyonu:

SQL Server 2012 sürümü ile gelen bir fonksiyondur. Bir veri tipinden diğerine döndürmek için kullanılır. Şayet dönüştürme işlemi başarılı ise dönüştürülmüş değeri verir. Başarısız ise veya ilk değer NULL ise NULL değeri döndürür. Genel kullanımı şu şekildedir:TRY_CONVERT (veritipi[(uzunluk)], sutun_ismi)


Örnek:

5.20 değeri parasal türe dönüştürülebilir ama abcd değeri bir parasal değer ifade edemez. Bu yüzden parasal tipe döndürülemez.SELECT TRY_CONVERT(MONEY,'5.20') AS Parasal, TRY_CONVERT(MONEY,'abcd') AS HataliParasal ;




Şekil 4: TRY_CONVERT fonksiyonun çalışması
PARSE Fonksiyonu:

SQL Server 2012 sürümü ile gelen bir fonksiyondur. Parse fonksiyonu, CAST ve CONVERT fonksiyonlarından farklı olarak sadece metin tutan verileri girdi olarak kabul eder ve bir metni tarih zaman veya tam sayı tiplerine dönüştürmek için kullanılır. Para birimi gibi ek göstergeler için kültür kodu parametre olarak verilebilir. Türkiye için kültür kodu "tr-TR" dir.

Genel kullanımı şu şekildedir:PARSE(string_sutun_ismi AS hedef_tip [USING xx-XX])





Örnek:

tblUrun tablosunda yer alan fiyatları parasal tipe dönüştürerek gösterelim. Öncelikle VARCHAR'a dönüştürdüğümüze dikkat edin.SELECT PARSE(CONVERT(VARCHAR(8),listeFiyat) AS MONEY USING 'tr-TR' ) as PARASAL FROM tblUrun




Şekil 5: PARSE fonksiyonu, String değerleri tarihzaman ve INTEGER tiplere dönüştürmek için kullanılır
TRY_PARSE Fonksiyonu:

SQL Server 2012 sürümü ile gelen bir fonksiyondur. PARSE fonksiyonundan farklı olarak, dönüştürme işleminde başarılı olamazsa NULL döndürür. PARSE fonksiyonunun, başarılı olamazsa bir hata mesajı ile programın çalışmasını sonlandırmasını istemediğimiz durumlarda, TRY_PARSE fonksiyonu kullanılabilir.

Örnek:

5 değeri parasal bir tipe dönüştürülebilir. Ancak abc değeri parasal bir tipe dönüştürülemez. TRY_PARSE fonksiyonu, hata vermez ama NULL döndürür.SELECT PARSE('5' AS MONEY) as PARASAL , TRY_PARSE('abc' AS MONEY) as T_PARASAL




Şekil 6: PARSE ve TRY_PARSE fonksiyonlarının çalışma şekilleri 5 değerini TRY_PARSE ve abc değerini PARSE fonksiyonuna verdiğimizde hata alırız. Çünkü PARSE fonksiyonu TRY_PARSE gibi hataları tolere etmez.
FORMAT Fonksiyonu:

SQL Server 2012 sürümü ile gelen bir fonksiyondur. Bu fonksiyon, .NET ortamındaki bütün String formatlama işlevlerini SQL Server ortamına getirmiş bir fonksiyondur. Kolaylık ve pratikliğine bakıldığında sonraki sürümlerde veritabanı programcıları için CAST ve CONVERT fonksiyonlarının yerini alması muhtemel gibi görüyor.

Genel kullanımı şu şekildedir:FORMAT(sutunAd, format [,kultur])





Özellikle, tarih zaman formatlama işlemlerinde, parasal değerlerin formatlanmasında ve sayıların formatlanmasında, yer yer FORMAT fonksiyonuna ihtiyaç duyabiliriz.

Örnek:

Bugünün tarihini alıp, tarih formatlama ile ilgili yapılabileceklerin bir listesiSELECT FORMAT(GETDATE(),'d') AS kisaTarih, FORMAT(GETDATE(),'d','tr-TR') AS turkTarihFormatiTR, FORMAT(GETDATE(),'D','tr-TR') AS uzunTarihFormatiTR, FORMAT(GETDATE(),'T','tr-TR') AS uzunZamanFormatiTR, FORMAT(GETDATE(),'ddd','tr-TR') AS haftaGunuTR, FORMAT(GETDATE(),'ddd') AS haftaGunu, FORMAT(GETDATE(),'MMM','tr-TR') AS ayTR, FORMAT(GETDATE(),'yyyy','tr-TR') AS yilTR, FORMAT(GETDATE(),'yyyy.MM.dd HH:mm:ss') AS ozelformat




Şekil 7: FORMAT fonksiyonu ile tarih şekillendirme örnekleriÖrnek:

5 rakamı ile yapılabilecekSELECT FORMAT(5,'C','tr-TR') AS TL, FORMAT(5,'C','en-US') AS USD, FORMAT(0.05,'P','tr-TR') AS yuzde, FORMAT(5,'N','tr-TR') AS ondalikTR, FORMAT(5,'N','en-US') AS ondalikUSA




Şekil 8: FORMAT fonksiyonu ile parasal tiplerin ve sayıların formatlandırılması örnekleri

20 Ocak 2016 Çarşamba

Bozuk Karakterlerin Türkçe Karşılıklarını Bulan Function

Bozuk Karakterlerin Türkçe Karşılıklarını Bulan Function


CREATE FUNCTION TRK (   
@Deger NVARCHAR(MAX)  
)  
RETURNS NVARCHAR(MAX)  
AS  
BEGIN  
 
DECLARE @sonuc NVARCHAR(MAX)  
SET @sonuc = @Deger  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'ð', N'ğ');  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'ð', N'Ğ'); 
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN, N'Ð', N'Ğ');  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'ý', N'ı');  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'Ý', N'İ');  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'þ', N'ş');  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'Þ', N'Ş'); 
RETURN  @sonuc   COLLATE Turkish_CI_AS ;

END