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.
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 |
---|
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.
Not
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.
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.
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
Sistem işlevler (Transact-sql)