Share via


Veri Türü Dönüştürme (Veritabanı Altyapısı)

Veri türleri şu senaryolarda dönüştürülebilir:

  • Bir nesneye ilişkin veriler taşındığında, başka bir nesneye ilişkin verilerle karşılaştırıldığında veya birleştirildiğinde, verilerin bir nesnenin veri türünden diğer nesnenin veri türüne dönüştürülmesi gerekmiş olabilir.

  • Transact-SQL sonuç sütununa ilişkin veriler, dönüş kodu veya çıkış parametresi bir program değişkenine taşındığında, verilerin SQL Server sistem veri türünden değişkenin veri türüne dönüştürülmesi gerekir.

Veri türleri, örtük veya açık olarak dönüştürülebilir:

  • Örtük dönüştürmeler kullanıcı tarafından görülemez.

    SQL Server, verileri otomatik olarak bir veri türünden diğerine dönüştürür.Örneğin smallint, int ile karşılaştırıldığında, karşılaştırma devam etmeden önce smallint açıkça int öğesine dönüştürülür.

  • Açık dönüştürmeler CAST veya CONVERT işlevlerini kullanır.

    CAST ve CONVERT işlevleri değeri (yerel değişken, sütun veya başka bir deyim) bir veri türünden diğerine dönüştürür.Örneğin şu CAST işlevi $157.27 sayısal değerini '157.27' karakter dizesine dönüştürür:

    CAST ( $157.27 AS VARCHAR(10) )
    

    Transact-SQL program kodunun ISO ile uyumlu olmasını istiyorsanız, CONVERT yerine CAST işlevini kullanın.CONVERT işlevindeki stil işlevinden yararlanmak için CAST yerine CONVERT işlevini kullanın.

Bazı örtük ve açık veri türü dönüştürmeleri bir SQL Server nesnesinin veri türü başka bir nesneye dönüştürüldüğünde desteklenmez.Örneğin nchar değeri image değerine dönüştürülemez.nchar, açık dönüştürme kullanılarak yalnızca binary değere dönüştürülebilir. binary değere yapılacak örtük dönüştürme desteklenmez.Ancak nchar, açık veya örtük olarak nvarchar değerine dönüştürülebilir.

sql_variant veri türü işlendiğinde, SQL Server, diğer veri türlerine sahip nesnelerin sql_variant türüne örtük şekilde dönüştürülmesini destekler.Ancak SQL Server, sql_variant verilerinin başka bir veri türüne sahip nesneye örtük şekilde dönüştürülmesini desteklemez.

SQL Server nesneleri arasındaki desteklenen dönüştürmeler hakkında daha fazla bilgi için bkz.: CAST ve CONVERT (Transact-SQL).

Bir uygulama değişkeni ve SQL Server sonuç kümesi sütunu, dönüş kodu, parametre veya parametre işaretleyicisi arasında dönüştürme yaparken, desteklenen veri türü dönüştürmeleri veritabanı API'si ile tanımlanır.Daha fazla bilgi için, bkz. Program değişkenleri için verileri taşıma.

Veri Türü Dönüştürme Davranışları

Bu konudaki şu bölümler şu veri türlerinin göstereceği dönüştürme davranışlarını tanımlar:

ikili ve değişken ikili veriler

para verileri

bit veri

ondalık ve sayısal veriler

Karakter verileri

OLE Otomasyonu saklı yordamları kullanılarak veri türleri

tarih ve saat verileri

tamsayı verileri

kayan ve gerçek veriler

İkili ve değişken ikili Verileri dönüştürme

Veri, dize veri türünden (char, varchar, nchar, nvarchar, binary, varbinary, text, ntext veya image) eşit olmayan bir uzunluğun binary veya varbinary veri türüne dönüştürüldüğünde, SQL Server verileri sağdan doldurur veya keser.Diğer veri türleri binary veya varbinary olarak dönüştürüldüğünde, veri soldan doldurulur veya kesilir.Doldurma, onaltılık sıfırlar kullanılarak elde edilir.

binary veriler veriyi taşımanın en kolay yoluysa, veriyi binary ve varbinary veri türüne dönüştürme işlemi kullanılabilir.Herhangi bir türün herhangi bir değeri yeteri kadar büyük bir boyutun ikili değerine ve ardından söz konusu türe yeniden dönüştürüldüğünde işlem, her iki dönüştürme de aynı SQL Server sürümünde bulunuyorsa her zaman aynı değerle sonuçlanır.Değerin ikili değer gösteriminin sürümü SQL Server olacak şekilde değişebilir.

int, smallint ve tinyint öğelerini binary veya varbinary olarak dönüştürebilirsiniz. Ancak binary değeri yeniden tamsayı değerine dönüştürürseniz, kısaltma oluştuğu takdirde bu değer özgün tamsayı değerinden farklı hale gelir.Örneğin şu SELECT deyimi genellikle 123456 öğesinin ikili 0x0001e240 olarak saklandığını gösterir:

SELECT CAST( 123456 AS BINARY(4) )

Ancak şu SELECT deyimi, binary hedef tüm değeri içeremeyecek kadar küçükse, aynı sayının 0xe240 olarak saklanabilmesi için öndeki hanelerin sessiz bir şekilde kesildiğini gösterir:

SELECT CAST( 123456 AS BINARY(2) )

Şu toplu iş sessiz yapılan söz konusu kesme işleminin hataya neden olmadan aritmetik işlemleri etkileyebileceğini gösterir:

DECLARE @BinaryVariable2 BINARY(2)

SET @BinaryVariable2 = 123456
SET @BinaryVariable2 = @BinaryVariable2 + 1

SELECT CAST( @BinaryVariable2 AS INT)
GO

Son sonuç 57921 değeridir, 123457 değeri değildir.

Not

Herhangi bir veri türü ve binary veri türleri arasında yapılan dönüştürme işleminin SQL Server sürümleri arasında yapılanlarla aynı olacağı garanti edilmez.

Bit Veriye dönüştürme

bit değere dönüştürme işlemi sıfır dışında herhangi bir değeri 1'e yükseltir.

Karakter Verilerini Dönüştürme

Karakter deyimleri farklı bir boyuttaki karakter verilerine dönüştürüldüğünde, yeni veri için çok uzun olan değerler kesilir.

Bir karakter deyimi char(5) değerden varchar(5) değere veya char(20) değerden char(15) değere olacak şekilde farklı bir veri türü ya da boyutunda bir karakter ifadesine dönüştürüldüğünde, giriş değerinin alfabe düzeni dönüştürülen değere atanır.Karakter içermeyen bir deyim karakter veri türüne dönüştürülürse, mevcut veritabanının varsayılan alfabe düzeni dönüştürülen değere atanır.Her iki durumda da COLLATE yan tümcesini kullanarak belirli bir alfabe düzeni atayabilirsiniz.

Not

Kod sayfası çevirileri char ve varchar veri türleri için desteklenir ancak text veri türü için desteklenmez.Eski SQL Server sürümlerinde olduğu gibi kod sayfası çevirileri sırasında yaşanan veri kaybı bildirilir.

Ortalama numeric veri türüne dönüştürülen karakter deyimleri isteğe bağlı üstel gösterim içerebilir (küçük harf e veya büyük harf E ve ardından isteğe bağlı artı (+) ya da eksi (-) işareti ve bir sayı).

Tam bir numeric veri türüne dönüştürülen karakter deyimleri basamaklar, ondalık virgül ve isteğe bağlı artı (+) veya eksi (-) işaretlerini içermelidir.Önde gelen boşluklar göz ardı edilir.Dizede, 123.456,00 örneğinde olduğu gibi binlik ayırıcı gibi virgül ayırıcılara izin verilmez.

money veya smallmoney veri türlerine dönüştürülen karakter deyimleri isteğe bağlı ondalık virgül ve dolar ($) işareti de içerebilir.$123.456,00 örneğinde olduğu gibi virgül ayırıcılara izin verilir.

Şu örnek görüntüye ilişkin verilerin nasıl dönüştürüleceğini gösterir.Bu örnek, dize karşılaştırması gerçekleştirmeden önce satış verilerini karakter verilerine ve mevcut tarihi 3. stil olan gg/aa/yy şekline dönüştürür.

USE AdventureWorks2008R2;
GO
SELECT BusinessEntityID,
   CAST(SalesYTD AS varchar(12)),
   CONVERT(VARCHAR(12), GETDATE(), 3)
FROM Sales.SalesPerson
WHERE CAST(SalesYTD AS varchar(20) ) LIKE '1%';
GO

Bu örnek uniqueidentifier değerini char veri türüne dönüştürür.

DECLARE @myid uniqueidentifier
SET @myid = NEWID()
SELECT CONVERT(char(255), @myid) AS 'char';
GO

Bu örnek mevcut tarihi 3, gg/aa/yy şekline dönüştürür.

SELECT CONVERT(char(12), GETDATE(), 3);
GO

Tarih ve Saat Verilerini dönüştürme

date ve time veri türlerini dönüştürdüğünüzde, SQL Server tarih ve saat olarak tanımadığı değerleri reddeder.Tüm Transact-SQL tarih ve saat veri türlerine ve işlevlerine genel bir bakış için bkz.: Tarih ve Saat İşlevleri (Transact-SQL).

Şu örnek date ve datetime2 değerlerini sırasıyla varchar ve binary veri türlerine dönüştürür.

DECLARE @mydate date;
SET @mydate = '4/05/98';

SELECT CAST(@mydate AS varchar) AS DATE_VARCHAR;
GO

DECLARE @mydate  datetime2;
SET @mydate     = '4/05/98';

SELECT  CAST(@mydate AS binary) AS DATE_BINARY;
GO

Sonuç kümesi buradadır.

(1 row(s) affected)

DATE_VARCHAR

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

Apr 5 1998

(1 row(s) affected)

DATE_BINARY

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

0x0700000000008B210B

(1 row(s) affected)

Kayan ve gerçek Verileri dönüştürme

float değerler bir tamsayı türüne dönüştürüldüğünde kesilir.

float veya real değerden bir karakter verisine dönüştürme işlemi gerçekleştirmek istediğinizde, STR dize işlevini kullanmak genellikle CAST ( ) işlevinden daha kullanışlıdır.Bunun nedeni, STR işlevinin biçimlendirme üzerinde daha fazla denetim sağlamasıdır.Daha fazla bilgi için, bkz. str (Transact-sql) ve Yerleşik İşlevler (Transact-SQL).

Para Verilerini dönüştürme

money değerinden tamsayı veri türlerine dönüştürme işlemi gerçekleştirdiğinizde, birimlerin parasal birimler olduğu varsayılır.Örneğin, 4 tamsayı değeri eşdeğeri money 4 para birimine dönüştürülür.

Şu örnek smallmoney ve money değerlerini sırasıyla varchar ve decimal veri türlerine dönüştürür.

USE AdventureWorks2008R2;
GO
DECLARE @mymoney_sm smallmoney;
SET  @mymoney_sm = 3148.29;
SELECT  CAST(@mymoney_sm AS varchar) AS 'SM_MONEY varchar';
GO
DECLARE @mymoney    money;
SET  @mymoney    = 3148.29;
SELECT  CAST(@mymoney AS decimal)    AS 'MONEY DECIMAL';

GO

Sonuç kümesi buradadır.

SM_MONEY VARCHAR

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

3148.29

(1 row(s) affected)

MONEY DECIMAL

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

3148

(1 row(s) affected)

Ondalık ve sayısal Verileri dönüştürme

decimal ve numeric veri türleri için SQL Server her bir belirli duyarlık ve ölçek kombinasyonunu farklı bir veri türü olarak değerlendirir.Örneğin, decimal(5,5) ve decimal(5,0) farklı veri türleri olarak değerlendirilir.

Transact-SQL deyimlerinde gerekli minimum duyarlık ve ölçek kullanılarak ondalık virgüllü bir sabit otomatik olarak numeric veri değerine dönüştürülür.Örneğin 12,345 sabiti 5 duyarlığına ve 3 ölçeğine sahip numeric değere dönüştürülür.

decimal veya numeric değerinden float veya real değerine dönüştürme işlemi duyarlık kaybına neden olabilir.int, smallint, tinyint, float, real, money, veya smallmoney değerlerinden decimal veya numeric değere dönüştürme işlemi taşmaya neden olabilir.

Varsayılan olarak SQL Server, bir sayıyı daha düşük bir düzeydeki duyarlık ve ölçeğe sahip bir decimal veya numeric değere dönüştürürken yuvarlama kullanır.Ancak SET ARITHABORT seçeneği AÇIKSA, taşma meydana geldiğinde SQL Server hata verir.Yalnızca duyarlık ve ölçek kaybı hata vermesi için yeterli değildir.

Tamsayı Verilerini dönüştürme

Tamsayılar örtük olarak karakter veri türüne dönüştürüldüğünde, tamsayı karakter alanına sığdırılamayacak kadar büyük olduğu takdirde SQL Server 42 numaralı ASCII karakteri olan yıldız işaretini (*) girer.

2.147.483.647 rakamından büyük tamsayı sabitleri decimal veri türüne dönüştürülür, bigint veri türüne dönüştürülmez.Şu örnek eşik değeri aşıldığında sonuç veri türünün int değerden decimal değere dönüştürüldüğünü gösterir.

SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;

Sonuç kümesi buradadır.

Result1 Result2

1073741823 1073741824.500000

Veri Türlerini OLE Otomasyonu Saklı Yordamlarını Kullanarak Dönüştürme

SQL Server, Transact-SQL veri türlerini ve OLE Otomasyonu Visual Basic veri türlerini kullandığından OLE Otomasyonu saklı yordamları aralarından geçen verileri dönüştürmelidir.

Aşağıdaki tabloda SQL Server, Visual Basic veri türü dönüştürmeleri tanımlanmaktadır.

SQL Server veri türü

Visual Basic veri türü

char, varchar, text, nvarchar, ntext

String

decimal, numeric

String

bit

Boolean

binary, varbinary, image

Tek boyutlu Byte() dizi

int

Long

smallint

Integer

tinyint

Byte

float

Double

real

Single

money, smallmoney

Currency

datetime, smalldatetime

Date

NULL olarak ayarlanan her şey

Variant Null olarak ayarlandı

Tüm tek SQL Server değerleri, binary, varbinary ve image değerler dışında tek Visual Basic değerine dönüştürülür.Bu değerler Visual Basic içinde tek boyutlu Byte() dizisine dönüştürülür.Bu dizi aralığı: Byte(0 - length1)length (SQL Server binary, varbinary veya image değerlerindeki bayt sayısı).

Bunlar Visual Basic veri türlerinden SQL Server veri türlerine yapılan dönüştürmelerdir.

Visual Basic veri türü

SQL Server veri türü

Long, Integer, Byte, Boolean, Object

int

Double, Single

float

Currency

money

Date

datetime

String (4000 karakter veya daha az)

varchar/nvarchar

String (4000 karakterden fazla)

text/ntext

8000 veya daha az diziye sahip tek boyutlu Byte()

varbinary

8000 veya daha fazla diziye sahip tek boyutlu Byte()

image