Veri türleriyle çalışma

Tamamlandı

Transact-SQL'de kullanılan sütunların ve değişkenlerin her birinin bir veri türü vardır. İfadelerdeki değerlerin davranışı, başvurulmakta olan sütunun veya değişkenin veri türüne bağlıdır. Örneğin, daha önce gördüğünüz gibi, iki dize değerini birleştirmek veya iki sayısal değer eklemek için işlecini kullanabilirsiniz + .

Aşağıdaki tabloda, SQL Server veritabanında desteklenen yaygın veri türleri gösterilmektedir.

Kesin Sayısal Yaklaşık Sayı Karakter Tarih/Zaman İkilik Diğer
tinyint kayan nokta karakter tarih ikili imleç
smallint gerçek varchar Zaman varbinary hierarchyid
Int tarih/zaman sql_variant (SQL veri türü)
bigint nchar datetime2 tablo
parça nvarchar smalldatetime Tarih damgası
ondalık/sayısal Datetimeoffset (tarih ve zaman belirteci) tekil tanımlayıcı
sayısal XML
para coğrafi bölge
küçükpara geometri

Not

Farklı veri türleri ve öznitelikleri hakkında daha fazla bilgi için Transact-SQL başvuru belgelerini ziyaret edin.

Veri türü dönüşümü

Uyumlu veri türü değerleri gerektiği gibi örtük olarak dönüştürülebilir. Örneğin, bir integer sayıyı bir decimal sayıya eklemek veya sabit uzunlukta bir char değeri ile değişken uzunluklu bir varchar değerini birleştirmek için + işlecini kullanabildiğinizi varsayalım. Ancak, bazı durumlarda değerleri bir veri türünden diğerine açıkça dönüştürmeniz gerekebilir; örneğin, bir varchar değeri ile bir decimal değerini birleştirmek için + kullanmaya çalışmak, önce sayısal değeri uyumlu bir dize veri türüne dönüştürmediğiniz sürece hataya neden olur.

Not

Örtük ve açık dönüştürmeler belirli veri türleri için geçerlidir ve bazı dönüştürmeler mümkün değildir. Daha fazla bilgi için Transact-SQL başvuru belgelerindeki grafiği kullanın.

T-SQL, veri türleri arasında açıkça dönüştürmenize yardımcı olan işlevler içerir

CAST ve TRY_CAST

Değer hedef veri türüyle uyumluysa, CAST işlevi bir değeri belirtilen veri türüne dönüştürür. Uyumsuzsa bir hata döndürülür.

Örneğin, aşağıdaki sorgu, ProductID sütunundaki tamsayı değerlerini başka bir karakter tabanlı değerle birleştirmek üzere varchar değerlerine (en fazla 4 karakter) dönüştürmek için CAST kullanır:

SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;

Bu sorgudan elde edilen olası sonuç şuna benzer olabilir:

ProductName

680: HL Yol Çerçevesi - Siyah, 58

706: HL Yol Çerçevesi - Kırmızı, 58

707: Spor-100 Kask, Kırmızı

708: Spor-100 Kask, Siyah

...

Ancak, Production.Product tablosundaki Boyut sütununun, bazı sayısal boyutları (58 gibi) ve bazı metin tabanlı boyutları (örneğin "S", "M" veya "L") içeren bir nvarchar (değişken uzunluğu, Unicode metin verileri) sütunu olduğunu varsayalım. Aşağıdaki sorgu, değerleri bu sütundan tamsayı veri türüne dönüştürmeye çalışır:

SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;

Bu sorgu aşağıdaki hata iletisiyle sonuçlanır:

Hata: 'M' nvarchar değeri int veri türüne dönüştürülürken dönüştürme başarısız oldu.

Sütundaki değerlerin en azından bir kısmı sayısalsa, bu değerleri dönüştürüp diğerlerini yok saymak isteyebilirsiniz. Veri türlerini dönüştürmek için TRY_CAST işlevini kullanabilirsiniz.

SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;

Bu kez sonuçlar şöyle görünebilir:

Sayısal Boyut

58

58

SIFIR

SIFIR

...

Hedef sayısal veri türüne dönüştürülebilen değerler tamsayı değerleri olarak döndürülür ve uyumsuz değerler NULL olarak döndürülür ve bu değer bilinmediğini belirtmek için kullanılır.

Not

Bu ünitenin devamında NULL değerleri işlemek için dikkat edilmesi gereken noktaları inceleyeceğiz.

DÖNÜŞTÜR ve TRY_CONVERT

CAST, veri türleri arasında dönüştürmeye yönelik ANSI standart SQL işlevidir ve birçok veritabanı sisteminde kullanılır. Transact-SQL'de, burada gösterildiği gibi ÇEVİr işlevini de kullanabilirsiniz:

SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;

Bu sorgu bir kez daha belirtilen veri türüne dönüştürülen değeri şu şekilde döndürür:

ProductName

680: HL Yol Çerçevesi - Siyah, 58

706: HL Yol Çerçevesi - Kırmızı, 58

707: Spor-100 Kask, Kırmızı

708: Spor-100 Kask, Siyah

...

CAST gibi, CONVERT'in de uyumsuz değerler için NULL döndüren bir TRY_CONVERT varyantı vardır.

ÇEVİr'i CAST yerine kullanmanın bir diğer avantajı da, CONVERT'in sayısal ve tarih değerlerini dizelere dönüştürürken biçim stili belirtmenize olanak tanıyan bir parametre içermesidir. Örneğin, aşağıdaki sorguyu göz önüne alın:

SELECT SellStartDate,
       CONVERT(varchar(20), SellStartDate) AS StartDate,
       CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate 
FROM SalesLT.Product;

Bu sorgunun sonuçları şuna benzer olabilir:

SatışBaşlangıçTarihi

BaşlangıçTarihi

Biçimlendirilmiş Başlama Tarihi

2002-06-01T00:00:00.0000000

1 Haziran 2002 12:00

6/1/2002

2002-06-01T00:00:00.0000000

1 Haziran 2002 12:00

6/1/2002

2005-07-01T00:00:00.0000000

1 Temmuz 2005 12:00

1/7/2005

2005-07-01T00:00:00.0000000

1 Temmuz 2005 12:00

1/7/2005

...

...

...

Not

CONVERT ile kullanabileceğiniz stil biçimlendirme kodları hakkında daha fazla bilgi edinmek için Transact-SQL başvuru belgelerine bakın.

PARSE ve TRY_PARSE

PARSE işlevi, sayısal veya tarih/saat değerlerini temsil eden biçimlendirilmiş dizeleri dönüştürmek için tasarlanmıştır. Örneğin, aşağıdaki sorguyu ele alın (bu sorgu, bir tablodaki sütunlardan alınan değerler yerine sabit değerler kullanır):

SELECT PARSE('01/01/2021' AS date) AS DateValue,
   PARSE('$199.99' AS money) AS MoneyValue;

Bu sorgunun sonuçları şöyle görünür:

TarihDeğeri

MoneyValue

2021-01-01T00:00:00.0000000

199.99

CAST ve CONVERT'e benzer şekilde, PARSE'nin uyumsuz değerleri NULL olarak döndüren bir TRY_PARSE varyantı vardır.

Not

Ondalık veya sayısal veri türleriyle çalışırken, bir tam sayıya yuvarlamanız ya da ondalık basamağı belirlemeniz gerekebilir; bu, duyarlık ve ölçek kullanılarak yapılabilir. Bu duyarlık ve ölçek kavramını daha iyi anlamak için Transact-SQL başvuru belgelerine bakın.

STR

STR işlevi sayısal bir değeri varchar'a dönüştürür.

Örneğin:

SELECT ProductID,  '$' + STR(ListPrice) AS Price
FROM Production.Product;

Sonuçlar şuna benzer olacaktır:

ProductID

Fiyat

680

1432,00 ABD doları

706

1432,00 ABD doları

707

35,00 ABD doları

...

...