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.
| 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ı
...
...