Veri türleriyle çalışma
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.
Tam Sayısal
Yaklaşık Sayısal
Karakter
Tarih/Zaman
İkilik
Diğer
tinyint
kayan noktalı sayı
karakter
tarih
ikili
imleç
smallint
gerçek
varchar
Zaman
varbinary
hierarchyid
Int
Başka bir metin sağlanmadığı için, verilen metne dayalı bir çeviri yapmam mümkün değil. Lütfen çevirilecek metni belirtin.
tarih/zaman
görüntü
sql_variant (SQL veri türü)
bigint
nchar
datetime2
tablo
parça
nvarchar
smalldatetime
Tarih damgası
ondalık/sayısal
ntext
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 ondalık sayıya tamsayı+eklemek veya sabit uzunlukta bir karakter değeri ile değişken uzunluk varchar değerini birleştirmek için işlecini kullanabileceğ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, sayısal değeri uyumlu bir + değerini birleştirmek için kullanmaya çalışırken ondalık değer 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ğerlerden en az bazılarının sayısal olduğu göz önünde bulundurulduğunda, bu değerleri dönüştürmek ve diğerlerini yoksaymak 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ısalLaştır
58
58
SIFIR
SIFIR
...
Sayısal veri türüne dönüştürülebilen değerler ondalık değer 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, DÖNÜŞTÜR de uyumsuz değerler için NULL döndüren TRY_CONVERT bir değişkene sahiptir.
Ç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.
AYRıŞTıRma 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 (tablodaki sütunlardaki değerler yerine değişmez değerleri kullanan) göz önünde bulundurun:
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.00000000
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, tamsayıya yuvarlamanız veya ondalık ayırıcıyı ayarlamanız gerekebilir; bu nokta duyarlık ve ölçekle elde edilebilir. 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ı
Kategori 707
35,00 ABD doları
...
...