Veri türü dönüştürme (Veritabanı Altyapısı)
Aşağıdaki senaryolarda, veri türlerine dönüştürülebilir:
Verileri bir nesne için ile karşılaştırıldığında, veya başka bir nesne, verilerle birlikte taşınırken veriler veri türüne diğer bir nesne veri tipinden dönüştürülmesi gerekebilir.
Zaman verileri bir Transact-SQL bir program değişken taşınır, sonuç sütun, çıktı parametresi veya dönüş kodu, alınan verileri dönüştürülmeli SQL Server Sistem verilerini değişken veri türünü yazın.
Veri türleri, örtülü veya açık olarak dönüştürülebilir:
Örtülü dönüşüm kullanıcıya görünmez.
SQL Server otomatik olarak verileri bir veri türünden diğerine dönüştürür.Örneğin, ne zaman bir smallint Karşılaştırma için bir int, smallint örtülü olarak dönüştürülür int Karşılaştırma hasılatını önce.
Açık dönüştürme CAST veya CONVERT işlevleri kullanabilirsiniz.
The CAST and CONVERT functions convert a value (a local variable, a sütun, or another ifade) from one data type to another.Örneğin, aşağıdaki CAST işlev, sayısal değerini dönüştürür $157.27 bir karakter dizesi '157.27':
CAST ( $157.27 AS VARCHAR(10) )
Isterseniz CAST CONVERT yerine kullanın... Transact-SQL program kodu ISO ile uyumlu. CONVERT CAST yerine CONVERT stili işlevsellikten yararlanmak üzere kullanın.
Verileri dönüştürürken Dönüşüm desteklenmiyor bazı örtülü ve açık bir veri türü birini yazın SQL Server başka bir nesne. Örneğin, bir nchar değeri dönüştürülemiyor bir image Değer. Bir nchar yalnızca dönüştürülebilir binary Açık dönüştürme için örtülü bir dönüşüm kullanarak binary desteklenmiyor. Ancak, bir nchar açıkça veya örtük olarak dönüştürülebilir nvarchar.
Işlerken sql_variant Veri Türü SQL Server Diğer veri türlerine sahip nesnelerin örtülü dönüşüm destekleyen sql_variant TYPE. Ancak, SQL Server arasında örtülü dönüşüm desteklemiyor sql_variant verileri başka bir veri türü bir nesneye.
Arasında desteklenen dönüştürme hakkında daha fazla bilgi için SQL Server nesneler için bkz: CAST ve CONVERT (Transact-SQL).
Bir uygulama değişkeni arasında dönüştürürken ve bir SQL Server sütun, dönüş kodu, parametre veya parametre işaretçisi bir sonuç kümesi, desteklenen veri türü dönüşümlerinin API veritabanı tarafından tanımlanır. Daha fazla bilgi için bkz:Program değişkenler için veri taşıma.
Veri türü dönüştürme davranışları
Bu konu aşağıdaki bölümlerde aşağıdaki veri türleri tarafından yaşandığı dönüştürme davranışları açıklamaktadır:
ikili ve varbinary veri |
Money veri |
bit veri |
Ondalık ve sayısal veri. |
Karakter verisi |
Veri türleri, OLE Otomasyonu'nu kullanarak saklı yordamları |
Tarih ve saat veri |
tamsayı veri |
float ve gerçek veri |
Ikili ve varbinary veri dönüştürme
Veri bir dize veri türü (zaman dönüştürülür..char, varchar, nchar, nvarchar, binary, varbinary, text, ntext, veya image) için bir binary veya varbinary eşit olmayan uzunluk, veri türü SQL Server PADs veya sağdaki verileri keser. Diğer veri türleri için ne zaman dönüştürülür.. binary veya varbinary, veriler boşluklarla veya Sol taraftan kesildi. doldurma, onaltılık sıfır kullanarak sağlanır.
Veri dönüştürme binary ve varbinary veri türleri yarar, binary verileri veri hareket etmek için en kolay yoludur. Ikili değerini büyük için yeterli boyutunu yazın ve her iki consürüms aynı yerde almak için kullandığınız, sonra yeniden türü her zaman aynı değer sonuçlanacaktır herhangi bir değer dönüştürme sürüm, SQL Server. Değer bir ikili gösterimini sürümüne sürümünden değişebilir. SQL Server.
Dönüştürme yapabilirsiniz int, smallint, ve tinyint Kime binary veya varbinary, ancak dönüştürürseniz, binary kesme oluştu değere geri tamsayı değerini, bu değer özgün tamsayı değerden farklı olur. Örneğin, aşağıdaki SELECT deyim, tamsayı değerini gösterir 123456 genellikle bir ikili dosya depolanır 0x0001e240:
SELECT CAST( 123456 AS BINARY(4) )
Ancak, aşağıdaki SELECT Bu ıf deyimini gösterir binary Hedef değerin tümünü tutmak için çok küçük, aynı sayı olarak depolanır, önde gelen basamak sessizce kesiliyor 0xe240:
SELECT CAST( 123456 AS BINARY(2) )
Aşağıdaki toplu iş iş işi hata yükseltme olmadan Sessiz bu kesme aritmetik işlemleri etkileyebilir gösterir:
DECLARE @BinaryVariable2 BINARY(2)
SET @BinaryVariable2 = 123456
SET @BinaryVariable2 = @BinaryVariable2 + 1
SELECT CAST( @BinaryVariable2 AS INT)
GO
Son sonuç 57921, değil 123457.
Not
Veriler arasında dönüşüm yazın ve binary veri türleri aynı sürümleri arasında garanti edilmez SQL Server.
Veri bit dönüştürme
Dönüştürme bit 1 için'sıfır olmayan bir değere yükseltir.
Karakter veri dönüştürme
Bir karakter veri türünü farklı bir boyut için karakter ifadeler dönüştürüldüğünde, yeni veri türü için çok uzun değerler kesiliyor.
Ne zaman bir karakter ifade için farklı bir veri türü veya boyutuna, karakter bir deyim gibi dönüştürülür char(5) Kime varchar(5), veya char(20) Kime char(15), harmanlama giriş değeri, dönüştürülmüş değeri atanır. Bir karakter veri türüne noncharacter bir ifade dönüştürdüyseniz, geçerli veritabanının varsayılan harmanlama dönüştürülmüş değeri atanır.Her iki durumda da, belirli harmanlama kullanarak atamak için HARMANLA yan tümce.
Not
Kod sayfa çeviriler için destekleniyor char ve varchar veri türleri için değil text Veri Türü. Önceki sürümlerinde olduğu gibi SQL Server, kod sayfa dönüşümleri sırasında veri kaybını değil bildirdi.
Yaklaşık bir dönüştürülmüş bir karakter ifadeler numeric veri türü, isteğe bağlı bir üstel simgeleme içerebilir (küçük harf e ya da büyük E tarafından isteğe bağlı bir artı izler (+) veya eksi (-) işareti ve bir sayı).
Tam bir dönüştürülmüş bir karakter ifadeler numeric veri türü, sayı, ondalık noktası ve isteğe bağlı bir oluşması gerekir artı (+) veya eksi (-). Öndeki boşluklar göz ardı edilir.Virgül ayırıcıları (örneğin, binler basamağı ayırıcısını 123,456.00, izin dizede.
Dönüştürülen karakter ifadeler money veya smallmoney bir isteğe bağlı bir ondalık noktası ve dolar işareti ($), veri türleri de içerebilir. Virgül ayırıcısı ($ 123,456.00, olduğu gibi izin verilir.
Aşağıdaki örnek, verilerin görüntülenmesi için gösterilmiştir.Bu örnek, bir dize karşılaştırma gerçekleştirmeden önce satış verilerini karakter veri dönüştürür ve geçerli tarih, 3, gg/aa/yy stiline dönüştürür.
USE AdventureWorks;
GO
SELECT SalesPersonID,
CAST(SalesYTD AS varchar(12)),
CONVERT(VARCHAR(12), GETDATE(), 3)
FROM Sales.SalesPerson
WHERE CAST(SalesYTD AS varchar(20) ) LIKE '1%'
GO
Bu örnek dönüştüren bir uniqueidentifier için değer bir char Veri Türü.
DECLARE @myid uniqueidentifier
SET @myid = NEWID()
SELECT CONVERT(char(255), @myid) AS 'char'
GO
Bu örnek geçerli tarih stiline dönüştürür. 3, gg/aa/yy.
SELECT CONVERT(char(12), GETDATE(), 3)
GO
Tarih ve saat veri dönüştürme
Için dönüştürme date ve time veri türleri SQL Server tarihleri veya saatleri tanınmıyor tüm değerleri reddeder. Tüm genel bakış için Transact-SQL Tarih ve saat veri türü ve işlevler, bkz: Tarih ve saat işlevleri (Report Builder 1.0).
Aşağıdaki örnek dönüştürür date ve datetime2 değerleri varchar ve binary Veri, sırasıyla türleri.
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
Here is the result set.
(1 row(s) affected)
DATE_VARCHAR
------------------------------
Apr 5 1998
(1 row(s) affected)
DATE_BINARY
--------------------------------------------------------------
0x0700000000008B210B
(1 row(s) affected)
Float ve gerçek veri dönüştürme
Değerleri float herhangi bir tamsayı türü dönüştürüldüğünde kesiliyor.
Dönüştürmek istediğiniz float veya real karakter veri STR dize işlev kullanılarak CAST () ' genellikle daha kullanışlıdır. Bu, çünkü bu STR biçimlendirme üzerinde daha fazla denetim sağlar.Daha fazla bilgi için bkz: STR (Transact-SQL) ve Işlevler (Transact-SQL).
Money veri dönüştürme
Için dönüştürme money tamsayı veri türlerinden birimleri, para birimleri cinsinden olduğu varsayılır. Örneğin, 4 Tamsayı değeri için dönüştürülür money 4 parasal birim eşdeğeridir.
Aşağıdaki örnek dönüştürür smallmoney ve money değerleri varchar ve decimal Veri, sırasıyla türleri.
USE AdventureWorks;
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
Here is the result set.
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.
Için decimal ve numeric veri türleri SQL Server Her özel birleşimi duyarlık ve ölçeği farklı veri türü olarak nitelendirir. Örneğin, decimal(5,5) ve decimal(5,0) farklı veri türleri kabul edilir.
Içinde Transact-SQL ifadeleri, sabit bir ondalık noktasıyla otomatik olarak dönüştürülecek bir numeric veri değeri, en düşük duyarlık kullanarak ve gerekli ölçeklendirme. Örneğin, 12.345 sabit dönüştürülecek bir numeric değeri 5 olan bir duyarlık ve ölçeği 3.
Dönüştürme decimal veya numeric Kime float veya real duyarlık bazı kaybına neden olabilir. Dönüştürme int, smallint, tinyint, float, real, money, veya smallmoney ya da decimal veya numeric taşmasına neden olabilir.
Varsayılan olarak, SQL Server bir sayıya dönüştürme sırasında yuvarlamayı kullanan bir decimal veya numeric düşük duyarlık ve ölçek değeri. Ancak, ON, küme ARITHABORT seçeneği ise, SQL Server taşması oluştuğunda bir hata üretir. Duyarlık ve ölçeği kaybı hata yükseltmek için yeterli değil.
Tamsayı veri dönüştürme
Karakter alana sığmayacak kadar büyük bir tamsayı ise, tamsayılar örtülü olarak bir karakter veri türüne dönüştürülür SQL Server ASCII karakter 42, yıldız işareti (*) girer.
2,147,483,647 Dönüştürülür daha büyük bir tamsayı sabitler decimal Veri, türü değil bigint Veri Türü. Eşik değer aşıldığında, sonuç veri türünü değiştirir, aşağıdaki örnekte gösterildiği bir int için bir decimal.
SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;
Here is the result set.
Result1 Result2
1073741823 1073741824.500000
Yordamlar depolanmış olan veri türleri, OLE Otomasyonu'nu kullanarak dönüştürme
Çünkü SQL Server kullanır Transact-SQL veri türleri ve OLE Otomasyonu kullanır. Visual Basic veri türleri, depolanan Otomasyonu yordamlar, aralarında geçen verileri dönüştürmeniz gerekir.
Aşağıdaki tabloda açıklanmaktadır. SQL Server Kime Visual Basic veri dönüştürme türü.
SQL Server veri türü |
Visual Basic için 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 |
Hiçbir şey küme için NULL |
Variant Null olarak ayarlayın. |
Tüm tek SQL Server değerleri tek bir dönüştürülür.. Visual Basic dışında bir değer binary, varbinary, ve image Değerler. Bu değerler için bir tek boyutlu dönüştürülür. Byte() dizi içinde Visual Basic. This array has a range of Byte(0 to length1) where length is the number of bytes in the SQL Serverbinary, varbinary, or image values.
Bunlar, gelen dönüştürme Visual Basic veri türleri SQL Server veri türleri.
Visual Basic için veri türü |
SQL Server veri türü |
---|---|
Long, Integer, Byte, Boolean, Object |
int |
Double, Single |
float |
Currency |
money |
Date |
datetime |
String 4000 karakterden veya daha az |
varchar/nvarchar |
String ile 4000'den fazla karakter |
text/ntext |
Tek boyutlu Byte() dizi 8000 bayt veya daha az |
varbinary |
Tek boyutlu Byte() dizi ile 8000 bayttan fazla |
image |