Anasayfa / Yazılım / SQL / Diğer Veri Tipleri İle String Verileri Birleştirme ( CAST ve CONVERT )

Diğer Veri Tipleri İle String Verileri Birleştirme ( CAST ve CONVERT )

String olmayan veriler ile string verileri birleştirebilmek için string olmayan verilerin string tipine dönüştürülmesi gerekmektedir. Yalnız şöyle bir istisnaya da değinmeden geçemeyeceğim. SQL server management studio’da boş bir sorgu penceresinde aşağıdaki sorguyu yazın ve sonucu görün.

SELECT 3 + '3';
SELECT 13 + '3';
SELECT '5' + 7;

311206

Görüldüğü üzere toplama işlemi yaptı. Oysaki tırnak içinde yazılanlar aslında string. İşte istisna burada, eğer string değer SQL Server Management Studio tarafından Number olarak algılanabiliyorsa bu değerde Number’a herhangi bir işlem yapmaksızın dönüştürülebilir. Eğer bu sorguda 3+’3′ yerine ‘3’ + ‘3’ yazsa idim sonuç 33 olurdu ancak biri number biri string ve ortadaki işlem aslında matematiksel bir işlem yaptığı için ve komut satırımda herhangi bir ekstra işlemde belirtmediğim için sql server management studio number ile string toplamını eğer string değer number olabiliyorsa number ve numnber gibi düşünerek topladı. Ama ben number olamayacak bir string değer verse idim o zaman hata alırdım.

SELECT 3 + 'a';

Hata mesajımda aynen şöyle derdi;

“Conversion failed when converting the varchar value ‘a’ to data type int.”

VarChar tipindeki a değeri int tipine dönüştürülmeye çalışılırken hata alındı.

İşte veri tipleri dönüşümünde SQL’de kullanabileceğimiz iki deyim var, CAST ve CONVERT. Kullanımları oldukça basit :

CAST(deger AS yeniVeriTipi)
CONVERT(yeniVeriTipi, deger)

Şimdi örneklere geçiyorum. AdventureWorks veritabanı üzerinde çalışıyorum.

SELECT CAST(BusinessEntityID AS NVARCHAR) +
' - ' + FirstName + ' ' + LastName 
AS "Kimlik Bilgileri"
FROM Person.Person

Person.Person tablosunda BusinessEntityID alanını Nvarchar tipinde CAST ettim ve bunu sırası ile -, FirstName, boşluk ve LastName ile toplayıp Kimlik Bilgileri kolonu altında listeledim.

311207

Şimdi üstteki sorgunun aynısını CONVERT ile yapıyorum.

SELECT CONVERT(NVARCHAR(10), BusinessEntityID)
+ ' - ' + FirstName + ' ' + LastName
AS "Kimlik Bilgileri"
FROM Person.Person

311207

Bu sorgu ile bir önceki sorgu arasında sonuç olarak hiç bir fark yoktur. Bunda CONVERT kullandım, diğerinde CAST. Her ikisi de BusinessEntityID değerini string tipine dönüştürdü ve diğer string verilerle topladı.

Genelde tercih edilen CAST’tır çünkü ANSI SQL-99 standardı ile uyumludur. Ayrıca birde değinmek istediğim nokta CAST ile NVARCHAR dediğimizde bir boyut tanımlamadık. Burada varsayılan boyut 30 karakterdir. CONVERT için ise direkt olarak 10 tanımlamıştım. Eğer 30 karakterden fazla ihtiyacım olsa idi özel olarak belirtmem gerekirdi.

Aşağıdaki sorgu ile Number bir alanın string değer dönüştürülmesi ve dönüştürülmemesinin sonuçlarını gözlemliyorum. BusinessEntityID kısmına stringe çevirmeden 1 ekliyorum ve birde stringe çevirerek bir ekliyorum. Yani yazımın başında açıkladığım durumu görebilirsiniz.

SELECT BusinessEntityID, BusinessEntityID + 1 
AS "Sayısal Sonuç", 
CAST (BusinessEntityID AS NVARCHAR (10)) + '1'
AS "String Sonuç" FROM Person.Person

311209

Bir yorum

  1. İsmail Bey Merhaba;

    , CAST(AllOrdersWithAttributes.Qty1 AS INTEGER)/NULLIF(ProductAtt14Desc,0) as KAPADETI
    Sorgusu ile KAPADETI adlı sanal bir Sutun oluşturup yazdırıyorum. Buraya kadar sorun yok.
    Fakat;
    Bir sonraki adımda,
    ,KAPADETI * NULLIF(ProductAtt21Desc,0) AS TOPLAMM3
    ,KAPADETI * NULLIF(ProductAtt22Desc,0) AS TOPLAMNETKG
    ,KAPADETI * NULLIF(ProductAtt23Desc,0) AS TOPLAMBRUTKG
    şeklinde yaptığım zaman hata veriyor.
    Geçersiz sütun adı ‘KAPADETI’.
    Ne yapabilirim Fikir verebilir misiniz?

Bir cevap yazın

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