CAST ve CONVERT (Transact-SQL)

SQL Server 2012 uygulamasında bir veri türünü başka bir veri türüne dönüştürür.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

Syntax for CAST:
CAST ( expression AS data_type [ ( length ) ] )

Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Bağımsız değişkenler

  • expression
    Geçerli herhangi bir ifadedir.

  • data_type
    Hedef veri türüdür. Buna xml, bigint ve sql_variant dahildir. Diğer adlı veri türleri kullanılamaz.

  • length
    Hedef veri türünün uzunluğunu belirten isteğe bağlı bir tamsayıdır. Varsayılan değer 30’dır.

  • style
    CONVERT işlevinin expression ifadesini nasıl çevireceğini belirten bir tamsayıdır. Stil NULL ise, NULL döndürülür. Aralık data_type tarafından belirlenir. Daha fazla bilgi için, Yorumlar bölümüne bakın.

Dönüş Türleri

expression ifadesini data_type veri türüne çevrilmiş olarak döndürür.

Açıklamalar

Tarih ve Saat Stilleri

expression bir tarih veya saat veri türü olduğunda, style aşağıdaki tabloda gösterilen değerlerden biri olabilir. Diğer değerler 0 olarak işlem görür. SQL Server, Kuveyt algoritmasını kullanarak Arapça stilde tarih biçimini destekler.

Yüzyıl olmadan (yy) (1)

Yüzyıl ile (yyyy)

Standard

Giriş/Çıkış (3)

-

0 veya 100 (1, 2)

Default

ay gg yyyy ss:daÖÖ (veya ÖS)

1

101

ABD

aa/gg/yyyy

2

102

ANSI

yy.aa.gg

3

103

İngiliz/Fransız

aa/gg/yyyy

4

104

Almanca

gg.aa.yy

5

105

İtalyanca

gg-aa-yy

6

106 (1)

-

gg ay yy

7

107 (1)

-

Ay gg, yy

8

108

-

SS:da:ss

-

9 veya 109 (1, 2)

Varsayılan + milisaniye

ay gg yyyy SS:da:ss:mmmÖÖ (veya ÖS)

10

110

ABD

aa-gg-yy

11

111

JAPONYA

yy/aa/gg

12

112

ISO

yyaagg

yyyyaagg

-

13 veya 113 (1, 2)

Avrupa varsayılanı + milisaniye

gg ay yyyy SS:da:ss:mmm (24 sa.)

14

114

-

SS:da:ss:mmm (24 sa.)

-

20 veya 120 (2)

ODBC kurallı

yyyy-aa-gg SS:da:ss(24 sa.)

-

21 veya 121 (2)

ODBC kurallı (milisaniye ile)

yyyy-aa-gg SS:da:ss.mmm (24 sa.)

-

126 (4)

ISO8601

yyyy-aa-ggTSS:da:ss:mmm (boşluksuz)

-

127(6, 7)

Saat dilimi Z ile ISO8601.

yyyy-aa-ggTSS:da:ss.mmmZ

(boşluksuz)

-

130 (1, 2)

Hicri (5)

gg ay yyyy SS:da:ss:mmmÖÖ

-

131 (2)

Hicri (5)

gg/aa/yy SS:da:ss:mmmÖÖ

1 Bu stil değerleri sonucu belirli olmayan sonuçlar döndürür. Tüm (yy) (yüzyılsız) stilleri ve (yyyy) (yüzyıllı) stillerin bir alt kümesini döndürür.

2 Varsayılan değerler (style 0 veya 100, 9 veya 109, 13 veya 113, 20 veya 120 ve 21 veya 121) her zaman yüzyılı (yyyy) döndürür.

3 datetime değerine dönüştürürken giriş; karakter verilerine dönüştürürken çıkış.

4 XML kullanımı için tasarlanmıştır. datetime veya smalldatetime veri türlerinden karakter verilerine dönüştürürken, çıkış biçimi önceki tabloda anlatılmıştır.

5 Hicri çeşitli türleri olan bir takvim sistemidir. SQL Server Kuveyt algoritmasını kullanır.

Önemli notÖnemli

SQL Server, varsayılan olarak iki haneli yılları 2049'da bittikleri varsayımına göre yorumlar. Yani iki haneli yıl değeri 49, 2049 yılı olarak, iki haneli yıl değeri yıl değeri 50 ise 1950 olarak yorumlanır. Pek çok istemci uygulama; örneğin Otomasyon nesnelerine dayananlar, bitiş yılı olarak 2030'u kullanır. SQL Server, SQL Server tarafından kullanılan bitiş yılını değiştiren ve tarihlerin tutarlı olarak işlenmesini sağlayan two digit year cutoff yapılandırma seçeneğini sağlar. Yılları dört rakamlı olarak belirtmenizi öneririz.

6 Yalnızca karakter verileri datetime veya smalldatetime veri türlerine çevrilirken desteklenir. Yalnızca tarih veya saat bileşenlerini temsil eden karakter verileri datetime veya smalldatetime veri türlerine çevrildiğinde, belirtilemeyen saat bileşeni 00:00:00.000 olarak, belirtilmeyen tarih bileşeni ise 1900-01-01 olarak ayarlanır.

7İsteğe bağlı saat dilimi göstergesi Z, saat dilimi bilgileri olan XML datetime değerlerini saat dilimi olmayan SQL Server datetime değerleriyle eşlemeyi kolaylaştırmak için kullanılır. Z, UTC-0 saat dilimi göstergesidir. Diğer saat dilimleri, + veya - yönde SS:MM uzaklığı ile gösterilir. Örneğin: 2006-12-12T23:45:12-08:00.

smalldatetime veri türünden karakter verilerine dönüştürdüğünüzde, saniyeleri veya milisaniyeleri içeren stiller bu konumlarda sıfırlar gösterir. datetime veya smalldatetime değerlerini uygun char veya varchar veri türü uzunluğunu kullanarak çevirdiğinizde istenmeyen tarih kısımlarını kırpabilirsiniz.

Saati içeren bir stildeki karakter verilerini datetimeoffset veri türüne çevirdiğinizde, sonuca bir saat dilimi uzaklığı eklenir.

float ve real Stilleri

expression float veya real olduğunda, style aşağıdaki tabloda gösterilen değerlerden biri olabilir. Diğer değerler 0 olarak işlem görür.

Değer

Output

0 (varsayılan)

En çok 6 rakam. Uygun olduğunda bilimsel gösterim kullan.

1

Her zaman 8 rakam. Her zaman bilimsel gösterim kullan.

2

Her zaman 16 rakam. Her zaman bilimsel gösterim kullan.

126, 128, 129

Eskiyle uyum nedeniyle dahil edilmiştir ve gelecek sürümlerde kaldırılabilir.

money ve smallmoney Stilleri

expression money veya smallmoney olduğunda,style aşağıdaki tabloda gösterilen değerlerden biri olabilir. Diğer değerler 0 olarak işlem görür.

Değer

Output

0 (varsayılan)

Ondalık ayıracının solunda üç basamakta bir nokta ayıracı konmaz, sağında ise iki basamak gösterilir; örneğin 4235,98.

1

Ondalık ayıracının solunda üç basamakta bir nokta ayıracı konur, sağında ise iki basamak gösterilir; örneğin 3.510,92.

2

Ondalık ayıracının solunda üç basamakta bir nokta ayıracı konmaz, sağında ise dört basamak gösterilir; örneğin 4235,9819.

126

char(n) veya varchar(n) türlerine dönüştürülürken stil 2'ye denktir

xml Stiller

expression xml olduğunda, style aşağıdaki tabloda gösterilen değerlerden biri olabilir. Diğer değerler 0 olarak işlem görür.

Değer

Output

0 (varsayılan)

Önemsiz boşluk karakterlerini yoksayan ve dahili bir DTD alt kümesine izin vermeyen varsayılan ayrıştırma davranışını kullan.

NotNot
xml veri türüne dönüştürdüğünüze, SQL Server önemsiz boşluk karakterleri XML 1.0'dan farklı şekilde işlenir.Daha fazla bilgi için, bkz. xml veri örnekleri oluşturma.

1

Önemsiz boşluk karakterlerini koru. Bu stil ayarı varsayılan xml:space işlemeyi, yerine xml:space="preserve" belirtilmiş gibi davranacak şekilde ayarlar.

2

Sınırlı dahili DTD alt kümesi işlemeyi etkinleştir.

Etkinse, sunucu, doğrulama yapılmayan ayrıştırma işlemlerini gerçekleştirmek için dahili bir DTD alt kümesinde sağlanan aşağıdaki bilgileri kullanabilir.

  • Özniteliklerin varsayılan değerleri uygulanır.

  • Dahili varlık başvuruları çözümlenir ve genişletilir.

  • DTD içerik modelinin sözdiziminin doğruluğu denetlenir.

Ayrıştırıcı harici DTD alt kümelerini yoksayar. Ayrıca, XML bildirimini, standalone özniteliğinin yes olarak mı no olarak mı ayarlandığını görmek için değerlendirmez; bunun yerine XML örneğini tek başına bir belgeymiş gibi ayrıştırır.

3

Önemsiz boşluk karakterlerini koru ve sınırlı dahili DTD alt kümesi işlemeyi etkinleştir.

İkili Stiller

expression binary(n), varbinary(n), char(n) veya varchar(n) olduğunda, style aşağıdaki tabloda gösterilen değerlerden biri olabilir. Tabloda listelenmeyen stil değerleri hata döndürür.

Değer

Output

0 (varsayılan)

ASCII karakterlerini ikili baytlara veya ikili baytları ASCII karakterlerine çevirir. Her karakter veya bayt 1:1 olarak dönüştürülür.

data_type ikili bir türse, sonucun soluna 0x karakterleri eklenir.

1, 2

data_type ikili bir türse, ifadenin bir karakter ifadesi olması gerekir. expression çift sayıda onaltılık rakamdan (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f) oluşması gerekir. style 1 olarak ayarlanırsa, 0x karakterleri ifadedeki ilk iki karakter olmalıdır. İfade tek sayıda karakter içeriyorsa veya karakterlerden herhangi biri geçersiz ise, bir hata oluşturulur.

Dönüştürülen ifadenin uzunluğu data_type türünün uzunluğundan fazlaysa, sonuç sağdan kırpılır.

Dönüştürülen sonuçtan daha büyük sabit uzunluklu data_types türlerinde sonucun sağına sıfırlar eklenir.

Veri türü bir karakter türüyse, ifadenin ikili bir ifade olması gerekir. Her iki karakter iki onaltılık karaktere dönüştürülür. Dönüştürülen ifadenin uzunluğu data_type türünün uzunluğundan fazlaysa, sonuç sağdan kırpılır.

data_type türü sabit boyutlu bir karakter türüyse ve dönüştürülen sonuç data_type türünden daha kısaysa, onaltılık rakam sayısını çift tutmak için dönüştürülen ifadenin sağına boşluk karakterleri eklenir.

style 1 için çevrilen sonucun soluna 0x karakterleri eklenir.

Örtük Dönüştürmeler

Örtük dönüştürmeler, bir CAST veya CONVERT işlevi belirtilmeden gerçekleşen dönüştürmelerdir. Örtük dönüştürmeler, bir CAST veya CONVERT işlevinin belirtilmesini gerektiren dönüştürmelerdir. Aşağıdaki çizim, SQL Server uygulamasında sistem tarafından sağlanan veri türleri için izin verilen tüm açık veya örtük veri türü dönüştürmelerini göstermektedir. Bunlar xml, bigint ve sql_variant türleridir. sql_variant türünden atama yapıldığında örtük bir dönüştürme gerçekleşmez, ancak sql_variant türüne dönüştürme yapılır.

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

datetimeoffset ile karakter türleri char, varchar, nchar ve nvarchar arasında dönüştürme yaptığınızda, dönüştürülen saat dilimi uzaklığı kısmının, hem SS hem DD için çift basamak olması gerekir; örneğin -08:00.

[!NOT]

Unicode verileri her zaman çift sayıda bayt kullandığından, binary veya varbinary türleri ile Unicode tarafından desteklenen veri türleri arasında dönüştürme yaparken dikkatli olun. Örneğin, şu dönüştürme 41 sayısının onaltılık değerini döndürmez; 4100 döndürür: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).

Büyük Değerli Veri Türleri

Büyük değerli veri türleri, küçük değerli karşılıklarıyla, özellikle de varchar, nvarchar ve varbinary veri türleriyle aynı açık veya örtük dönüştürme davranışını sergiler. Ancak, aşağıdaki yönergeleri izlemeyi düşünmelisiniz:

  • image türünden varbinary(max) türüne veya tersine dönüştürme örtük bir dönüştürmedir; text ile varchar(max) ve ntext ile nvarchar(max) arasındaki dönüştürmelerde öyle.

  • varchar(max) gibi büyük değerli veri türlerinden bunların varchar gibi daha küçük karşılıklarına yapılan dönüştürme, örtük bir dönüştürmedir; ancak büyük değer daha küçük veri türünün belirtilen uzunluğu için çok büyükse, kırpılma gerçekleşir.

  • varchar, nvarchar veya varbinary türlerinden bunların büyük değerli karşılıklarına yapılan dönüştürme, örtük olarak gerçekleşir.

  • sql_variant veri türünden büyük değerli veri türlerine dönüştürme açık bir dönüştürmedir.

  • Büyük değerli veri türleri sql_variant veri türüne dönüştürülemez.

xml veri türlerinden nasıl dönüştürme yapılacağı hakkında daha fazla bilgi için bkz. xml veri örnekleri oluşturma.

xml Veri Türü

xml veri türünü bir dize veya ikili veri türüne açık veya örtük olarak dönüştürdüğünüzde, xml veri türünün içeriği, bir dizi kurala göre serileştirilir. Bu kurallar hakkında daha fazla bilgi için, bkz. Seri hale getirme xml veri tanımlama. Başka veri türlerinden xml veri türlerine nasıl dönüştürme yapılacağı hakkında bilgi için bkz. xml veri örnekleri oluşturma.

text ve image Veri Türleri

Otomatik veri türü dönüştürme text ve image veri türleri için desteklenmez. text verilerini karakter verilerine ve image verilerini binary veya varbinary verilerine açık olarak dönüştürebilirsiniz, ancak uzunluk üst sınırı 8000 bayttır. Harfler içeren bir karakter ifadesini bir int türüne dönüştürmeye çalışmak gibi yanlış bir dönüştürme yaparsanız, SQL Server bir hata iletisi döndürür.

Çıktı Harmanlama

CAST veya CONVERT işlevlerinin çıktısı bir karakter dizesi olduğunda ve girdi bir karakter dizesi olduğunda, çıktının harmanlaması ve harmanlama etiketi girdi ile aynıdır. Girdi bir karakter dizesi değilse, çıktı veritabanının varsayılan harmanlamasına ve zorlanabilir varsayılan harmanlama etiketine sahiptir. Daha fazla bilgi için, bkz. Harmanlama önceliği (Transact-sql).

Çıktıya farklı bir harmanlama atamak için, CAST veya CONVERT işlevinin sonuç ifadesine COLLATE deyimini uygulayın. Örneğin:

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

Sonuçları Kısaltma ve Yuvarlama

Karakter ifadelerini veya ikili ifadeleri (char, nchar, nvarchar, varchar, binary veya varbinary) farklı bir veri türünde bir ifadeye dönüştürdüğünüzde, veri kırpılabilir, yalnızca kısmen gösterilebilir veya sonuç gösterilemeyecek kadar kısa olduğundan bir hata döndürülebilir. char, varchar, nchar, nvarchar, binary ve varbinary türlerine dönüştürmeler, aşağıdaki tabloda gösterilen dönüştürmeler hariç kırpılır.

Hangi veri türünden

Hangi veri türüne

Sonuç

int, smallint veya tinyint

char

*

 

varchar

*

 

nchar

E

 

nvarchar

E

money, smallmoney, numeric, decimal, float veya real

char

E

 

varchar

E

 

nchar

E

 

nvarchar

E

* = Sonuç uzunluğu gösterilemeyecek kadar kısa. E = Sonuç gösterilemeyecek kadar kısa olduğundan hata döndürüldü.

SQL Server, yalnızca tam devir dönüştürmelerin; yani bir veri türünü başka bir türe dönüştürüp sonra aslına geri dönüştürmenin sürümden sürüme aynı sonuçları vereceğini garantiler. Aşağıdaki örnek, bu tür bir tam devir dönüştürmesini göstermektedir:

DECLARE @myval decimal (5, 2);
SET @myval = 193.57;
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5));
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval));

DECLARE @myval decimal (5, 2);
SET @myval = 193.57;
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5));
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval));

[!NOT]

binary değerler oluşturup sonra bunları numeric veri türü kategorisinden bir veri türüne dönüştürmeye çalışmayın. SQL Server, bir decimal veya numeric veri türünün binary türüne dönüştürülmesinin sonucunun farklı SQL Server sürümlerinde aynı olacağını garantilemez.

Aşağıdaki örnek, gösterilemeyecek kadar küçük bir sonuç ifadesini göstermektedir.

USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, SUBSTRING(p.Title, 1, 25) AS Title, CAST(e.SickLeaveHours AS char(1)) AS 'Sick Leave'
FROM HumanResources.Employee e JOIN Person.Person p ON e.BusinessEntityID = p.BusinessEntityID
WHERE NOT e.BusinessEntityID >5;

USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, SUBSTRING(p.Title, 1, 25) AS Title, CAST(e.SickLeaveHours AS char(1)) AS 'Sick Leave'
FROM HumanResources.Employee e JOIN Person.Person p ON e.BusinessEntityID = p.BusinessEntityID
WHERE NOT e.BusinessEntityID >5;

Sonuç kümesi buradadır.

FirstName   LastName      Title   Sick Leave

---------   ------------- ------- --------

Ken         Sanchez       NULL   *

Terri       Duffy         NULL   *

Roberto     Tamburello    NULL   *

Rob         Walters       NULL   *

Gail        Erickson      Ms.    *

(5 row(s) affected)

Ondalık basamakları farklı olan veri türlerini birbirine dönüştürdüğünüzde, sonuç değeri bazen kırpılır, bazen ise yuvarlanır. Aşağıdaki tablo bu davranışı göstermektedir.

Kaynak

Amacı

Davranış

numeric

numeric

Round

numeric

int

Kırpma

numeric

money

Round

money

int

Round

money

numeric

Round

float

int

Kırpma

float

numeric

Round

Bilimsel gösterim kullanın float değerlerinin decimal veya numeric türlerine dönüştürülmesi 17 rakamlı bir kesinlikle sınırlıdır. 17 basamaktan daha yüksek kesinliği olan değerler sıfıra yuvarlanır.

float

datetime

Round

datetime

int

Round

Örneğin, aşağıdaki dönüştürmenin sonucu 10'dur:

SELECT CAST(10.6496 AS int);

Hedef veri türünün kaynak veri türünden daha az sayıda ondalık basamağının olduğu veri türlerini dönüştürdüğünüzde, değer yuvarlanır. Örneğin, aşağıdaki dönüştürmenin sonucu $10.3497'dur:

SELECT CAST(10.3496847 AS money);

SQL Server, sayısal olmayan char, nchar, varchar veya nvarchar verileri int, float, numeric veya decimal türüne dönüştürüldüğünde bir hata iletisi döndürür. SQL Server, ayrıca, boş bir dize (" ") numeric veya decimal türüne dönüştürüldüğünde de bir hata döndürür.

SQL Server 2005 ve Sonraki Sürümlerde Bazı datetime Dönüştürmelerinin Sonucu Önceden Bilinemez

SQL Server 2000'de, dizeden tarihe ve saate olan dönüştürmeler sonucu bilinebilir olarak işaretlidir. Ancak, bu durum, aşağıdaki tabloda listelenen stiller için geçerli değildir. Bu stiller için, dönüştürmeler dil ayarlarına bağlıdır. SQL Server 2005 ve sonraki sürümler, bu dönüştürmeleri sonucu önceden bilinemez olarak işaretlemektedir.

Aşağıdaki tablo, string türünden datetime türüne olan dönüştürmelerin sonucunun önceden bilinemediği stilleri listelemektedir.

1001'ün altındaki tüm stiller

106

107

109

113

130

1 Stil 20 ve 21 hariç

İkincil Karakterler (Yedek Çiftler)

SQL Server 2012 sürümünden başlayarak, ikincil karakter (SC) harmanlamaları kullanırsanız, bir nchar veya nvarchar türünden daha kısa bir nchar veya nvarchar türüne yapılan bir CAST işlemi yedek bir çiftin içini kırpmaz; ikincil karakterden öncesini kırpar. Örneğin, aşağıdaki kod dilimi @x ifadesini yalnızca 'ab' değerini tutar durumda bırakır. İkincil karakteri tutmak için yeterli alan yoktur.

DECLARE @x NVARCHAR(10) = 'ab' + NCHAR(0x10000);
SELECT CAST (@x AS NVARCHAR(3));

DECLARE @x NVARCHAR(10) = 'ab' + NCHAR(0x10000);
SELECT CAST (@x AS NVARCHAR(3));

SC harmanlamalarını kullanırken, CONVERT işlevinin davranışı CAST işlevinin davranışına benzerdir.

Uyumluluk Desteği

Daha önceki SQL Server sürümlerinde, time ve datetime2 veri türlerindeki CAST ve CONVERT işlemlerinin varsayılan stili, her iki türün de hesaplanan bir sütun ifadesinde kullanıldığı durum hariç 121'dir. Hesaplanan sütunlarda, varsayılan stil 0'dır. Bu davranış, oluşturulduklarında, otomatik parametreleştirmenin olduğu sorgularda veya kısıtlama tanımlarında kullanıldıklarında hesaplanan sütunları etkiler.

Uyumluluk düzeyi 110 kapsamında, time ve datetime2 veri türlerinin CAST ve CONVERT işlemlerinin varsayılan stili her zaman 121'dir. Sorgunuz eski davranışı varsayıyorsa, 110'dan daha düşük bir uyumluluk düzeyi kullanın veya etkilenen sorguda 0 stilini açıkça belirtin.

Veritabanını uyumluluk düzeyi 110'a yükseltmek, diske depolanan kullanıcı verilerini değiştirmez. Bu verileri el ile gerektiği gibi düzeltmelisiniz. Örneğin, yukarıda betimlendiği gibi bir hesaplanan sütun ifadesi içeren bir kaynakta bir tablo oluşturmak için SELECT INTO kullandıysanız, hesaplanan sütun tanımının kendisi yerine (stil 0'ı kullanan) veriler depolanır. Stil 121 ile eşleşmesi için bu verileri el ile güncelleştirmeniz gerekir.

Örnekler

A.CAST ve CONVERT işlevlerini birlikte kullanma

Örnekler, liste fiyatının ilk rakamında 3 olan ürünlerin adını almakta ve ListPrice değerlerini int türüne çevirmektedir.

-- Use CAST
USE AdventureWorks2012;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CAST(ListPrice AS int) LIKE '3%';
GO

-- Use CONVERT.
USE AdventureWorks2012;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CONVERT(int, ListPrice) LIKE '3%';
GO

-- Use CAST
USE AdventureWorks2012;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CAST(ListPrice AS int) LIKE '3%';
GO

-- Use CONVERT.
USE AdventureWorks2012;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CONVERT(int, ListPrice) LIKE '3%';
GO

B.CAST işlevini aritmetik işleçlerle kullanma

Aşağıdaki örnek tek bir sütunun hesaplanan değerini (Computed) yılbaşından bu yana toplam satışları (SalesYTD) komisyon yüzdesine (CommissionPCT) bölerek hesaplamaktadır. Bu sonuç, en yakın tamsayıya yuvarlandıktan sonra bir int veri türüne dönüştürülmektedir.

USE AdventureWorks2012;
GO
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS 'Computed'
FROM Sales.SalesPerson 
WHERE CommissionPCT != 0;
GO

USE AdventureWorks2012;
GO
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS 'Computed'
FROM Sales.SalesPerson 
WHERE CommissionPCT != 0;
GO

Sonuç kümesi buradadır.

Computed

------

379753754

346698349

257144242

176493899

281101272

0

301872549

212623750

298948202

250784119

239246890

101664220

124511336

97688107

(14 row(s) affected)

C.CAST işlevini birleştirmek için kullanma

Aşağıdaki örnek karakter veya ikili olmayan nonbinary ifadeleri CAST kullanarak birleştirmektedir.

USE AdventureWorks2012;
GO
SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice
FROM Production.Product
WHERE ListPrice BETWEEN 350.00 AND 400.00;
GO

USE AdventureWorks2012;
GO
SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice
FROM Production.Product
WHERE ListPrice BETWEEN 350.00 AND 400.00;
GO

Sonuç kümesi buradadır.

ListPrice

------------------

The list price is 357.06

The list price is 364.09

The list price is 364.09

The list price is 364.09

The list price is 364.09

(5 row(s) affected)

D.CAST işlevini daha okunabilir metin için kullanma

Aşağıdaki örnek, Name sütununu bir char(10) sütununa dönüştürmek için seçme listesinde CAST işlevini kullanmaktadır.

USE AdventureWorks2012;
GO
SELECT DISTINCT CAST(p.Name AS char(10)) AS Name, s.UnitPrice
FROM Sales.SalesOrderDetail s JOIN Production.Product p on s.ProductID = p.ProductID
WHERE Name LIKE 'Long-Sleeve Logo Jersey, M';
GO

USE AdventureWorks2012;
GO
SELECT DISTINCT CAST(p.Name AS char(10)) AS Name, s.UnitPrice
FROM Sales.SalesOrderDetail s JOIN Production.Product p on s.ProductID = p.ProductID
WHERE Name LIKE 'Long-Sleeve Logo Jersey, M';
GO

Sonuç kümesi buradadır.

Name       UnitPrice

---------- ---------------------

Long-Sleev 31.2437

Long-Sleev 32.4935

Long-Sleev 49.99

(3 row(s) affected)

E.CAST işlevini LIKE yan tümcesiyle kullanma

Aşağıdaki örnek money türündeki SalesYTD sütunu bir int türüne, sonra da LIKE yan tümcesi ile kullanılabilmesi için bir char(20) sütununa dönüştürmektedir.

USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID
FROM Person.Person p JOIN Sales.SalesPerson s ON p.BusinessEntityID = s.BusinessEntityID
WHERE CAST(CAST(s.SalesYTD AS int) AS char(20)) LIKE '2%';
GO

USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID
FROM Person.Person p JOIN Sales.SalesPerson s ON p.BusinessEntityID = s.BusinessEntityID
WHERE CAST(CAST(s.SalesYTD AS int) AS char(20)) LIKE '2%';
GO

Sonuç kümesi buradadır.

FirstName        LastName            SalesYTD         SalesPersonID

---------------- ------------------- ---------------- -------------

Tsvi             Reiter              2811012.7151      279

Syed             Abbas               219088.8836       288

Rachel           Valdez              2241204.0424      289

(3 row(s) affected)

F.CONVERT veya CAST işlevini tür tanımlı XML ile kullanma

Aşağıda, xml veri türü ve sütunları (SQL Server) kullanarak tür tanımlı XML'e dönüştürmek için CONVERT işlevini kullanan birkaç örnek verilmektedir.

Bu örnek boşluk karakterleri, metin ve etiketler içeren bir dizeyi tür tanımlı XML'e dönüştürmekte ve önemsiz tüm boşluk karakterlerini (düğümler arasında sınır boşlukları) kaldırmaktadır:

CONVERT(XML, '<root><child/></root>')

CONVERT(XML, '<root><child/></root>')

Bu örnek boşluk karakteri, metin ve etiketler içeren benzer bir dizeyi tür tanımlı XML'e dönüştürmekte ve önemsiz boşluk karakterlerini (düğümler arasında sınır boşlukları) korumaktadır:

CONVERT(XML, '<root>          <child/>         </root>', 1)

CONVERT(XML, '<root>          <child/>         </root>', 1)

Bu örnek, boşluk karakterleri, metin ve etiketler içeren bir dizeyi tür tanımlı XML'e çevirmektedir:

CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>'  AS XML)

CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>'  AS XML)

Daha fazla örnek için, bkz. xml veri örnekleri oluşturma.

G.datetime verileri ile CAST ve CONVERT kullanma

Aşağıdaki örnek geçerli tarih ve saati göstermekte, geçerli tarih ve saati bir karakter veri türüne dönüştürmek için CAST işlevini kullanmakta, sonra tarih ve saati ISO 8901 biçiminde göstermek için CONVERT işlevini kullanmaktadır.

SELECT 
   GETDATE() AS UnconvertedDateTime,
   CAST(GETDATE() AS nvarchar(30)) AS UsingCast,
   CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;
GO

SELECT 
   GETDATE() AS UnconvertedDateTime,
   CAST(GETDATE() AS nvarchar(30)) AS UsingCast,
   CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;
GO

Sonuç kümesi buradadır.

UnconvertedDateTime     UsingCast                      UsingConvertTo_ISO8601

----------------------- ------------------------------ ------------------------------

2006-04-18 09:58:04.570 Apr 18 2006 9:58AM            2006-04-18T09:58:04.570

(1 row(s) affected)

Aşağıdaki örnek önceki örneğin yaklaşık tersidir. Örnek bir tarih ve saat değerini karakter verisi olarak göstermekte, karakter verilerini datetime veri türüne çevirmek için CAST işlevini, sonra da karakter verilerini datetime veri türüne çevirmek için CONVERT işlevini kullanmaktadır.

SELECT 
   '2006-04-25T15:50:59.997' AS UnconvertedText,
   CAST('2006-04-25T15:50:59.997' AS datetime) AS UsingCast,
   CONVERT(datetime, '2006-04-25T15:50:59.997', 126) AS UsingConvertFrom_ISO8601 ;
GO

SELECT 
   '2006-04-25T15:50:59.997' AS UnconvertedText,
   CAST('2006-04-25T15:50:59.997' AS datetime) AS UsingCast,
   CONVERT(datetime, '2006-04-25T15:50:59.997', 126) AS UsingConvertFrom_ISO8601 ;
GO

Sonuç kümesi buradadır.

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601

----------------------- ----------------------- ------------------------

2006-04-25T15:50:59.997 2006-04-25 15:50:59.997 2006-04-25 15:50:59.997

(1 row(s) affected)

H.İkili veriler ve karakter verileri ile CONVERT kullanma

Aşağıdaki örnekler, ikili verileri ve karakter verilerini farklı stiller kullanarak dönüştürmenin sonuçlarını göstermektedir.

--Convert the binary value 0x4E616d65 to a character value.
SELECT CONVERT(char(8), 0x4E616d65, 0) AS 'Style 0, binary to character';

--Convert the binary value 0x4E616d65 to a character value.
SELECT CONVERT(char(8), 0x4E616d65, 0) AS 'Style 0, binary to character';

Sonuç kümesi buradadır.

Style 0, binary to character

----------------------------

Name

(1 row(s) affected)

--The following example shows how Style 1 can force the result
--to be truncated. The truncation is caused by
--including the characters 0x in the result.
SELECT CONVERT(char(8), 0x4E616d65, 1) AS 'Style 1, binary to character';

--The following example shows how Style 1 can force the result
--to be truncated. The truncation is caused by
--including the characters 0x in the result.
SELECT CONVERT(char(8), 0x4E616d65, 1) AS 'Style 1, binary to character';

Sonuç kümesi buradadır.

Style 1, binary to character

------------------------------

0x4E616D

(1 row(s) affected)

--The following example shows that Style 2 does not truncate the
--result because the characters 0x are not included in
--the result.
SELECT CONVERT(char(8), 0x4E616d65, 2) AS 'Style 2, binary to character';

--The following example shows that Style 2 does not truncate the
--result because the characters 0x are not included in
--the result.
SELECT CONVERT(char(8), 0x4E616d65, 2) AS 'Style 2, binary to character';

Sonuç kümesi buradadır.

Style 2, binary to character

------------------------------

4E616D65

(1 row(s) affected)

--Convert the character value 'Name' to a binary value.
SELECT CONVERT(binary(8), 'Name', 0) AS 'Style 0, character to binary';

--Convert the character value 'Name' to a binary value.
SELECT CONVERT(binary(8), 'Name', 0) AS 'Style 0, character to binary';

Sonuç kümesi buradadır.

Style 0, character to binary

----------------------------------

0x4E616D6500000000

(1 row(s) affected)

SELECT CONVERT(binary(4), '0x4E616D65', 1) AS 'Style 1, character to binary';

SELECT CONVERT(binary(4), '0x4E616D65', 1) AS 'Style 1, character to binary';

Sonuç kümesi buradadır.

Style 1, character to binary

----------------------------------

0x4E616D65

(1 row(s) affected)

SELECT CONVERT(binary(4), '4E616D65', 2) AS 'Style 2, character to binary';

SELECT CONVERT(binary(4), '4E616D65', 2) AS 'Style 2, character to binary';

Sonuç kümesi buradadır.

Style 2, character to binary

----------------------------------

0x4E616D65

(1 row(s) affected)

Ayrıca bkz.

Başvuru

select (Transact-sql)

Sistem işlevler (Transact-sql)

Kavramlar

Veri türü dönüştürme (veritabanı altyapısı)

Uluslararası Transact-sql deyimleri yazma