Data Type Conversion (Database Engine)

Typy danych mogą być konwertowane w następujących scenariuszach:

  • Po przeniesieniu danych z jednego obiektu, w porównaniu z lub w połączeniu z danymi pochodzącymi z innego obiektu danych może być do konwersji z typu danych z jednego obiektu na typ danych z drugiej strony.

  • Gdy dane z Transact-SQL kolumna wyników, zwrócony kod lub parametr wyjściowy jest przenoszony do zmiennej programu, należy przekonwertować dane z SQL Server Typ danych zmiennej typu danych systemowych.

Typy danych mogą być konwertowane, albo jawnie lub niejawnie:

  • Niejawna konwersja nie są widoczne dla użytkownika.

    SQL Server automatycznie przekształca dane z jednego typu danych na inny.Na przykład, jeśli smallint jest porównywany z int, smallint Domyślnie jest konwertowany na int przed przychodami porównania.

  • Jawne konwersje funkcji CAST lub CONVERT.

    The CAST and CONVERT functions convert a value (a local variable, a kolumna, or another wyrażenie) from one data type to another.Na przykład następujące CAST funkcja konwertuje wartość numeryczna $157.27 w ciąg znaków '157.27':

    CAST ( $157.27 AS VARCHAR(10) )
    

    Jeśli chcesz za pomocą CAST zamiast CONVERT Transact-SQL kod programu ma zgodne z ISO. Aby skorzystać z funkcji stylu CONVERT za pomocą CONVERT zamiast CAST.

Wpisz jedną pewnego typu danych niejawne i jawne konwersje nie są obsługiwane w przypadku konwertowania danych SQL Server obiekt do innej. Na przykład nchar Nie można przekonwertować wartości do image wartość. An nchar can only be converted to binary by using explicit conversion, an implicit conversion to binary is not supported.Jednak nchar można jawnie lub niejawnie konwertować na nvarchar.

Podczas obsługi sql_variant Typ danych SQL Server obsługuje konwersji niejawnych obiektów z innymi typami danych, aby sql_variant Typ. Jednak SQL Server nie obsługuje konwersji niejawnych z sql_variant dane do obiektu z innego typu danych.

Aby uzyskać więcej informacji na temat obsługiwanych podczas konwersji między SQL Server obiekty, zobacz CAST and CONVERT (Transact-SQL).

Podczas konwersji między zmienną aplikacji i SQL Server zestaw wyników, kolumna, kod powrotu, parametru lub parametr znacznik, zdefiniowano konwersje typów danych obsługiwanych przez interfejs API bazy danych. Aby uzyskać więcej informacji zobaczPrzenoszenie danych do programu zmienne.

Zachowania konwersji typu danych

W poniższych sekcjach w tym temacie opisano zachowania konwersji wystawiane przez następujące typy danych:

dane binarne i varbinarnym

dane pieniędzy

bit danych

Dane dziesiętne i liczbowe

Dane znakowe

Typy danych przy użyciu automatyzacji OLE procedur przechowywanych.

danych data i godziny

Liczba całkowita danych

LANE i rzeczywistych danych

Konwertowanie binarny i varbinarnym danych

Jeśli danych jest konwertowana z ciąg (typ danychchar, varchar, nchar, nvarchar, binary, varbinary, text, ntext, lub image) do binary lub varbinary Typ danych o różnej długości SQL Server pads lub obcina danych po prawej stronie. Gdy inne typy danych są konwertowane na binary lub varbinary, wypełniane lub obcinane po lewej stronie. uzupełnienie uzyskuje się za pomocą szesnastkowych, zera.

Konwertowanie danych binary i varbinary typy danych jest użyteczne, jeśli binary dane to najłatwiejszy sposób do przenoszenia danych. Konwertowanie dowolną wartością dowolnego typu do wartości binarnej wystarczająco duży rozmiar i następnie do typu, zawsze w wyniku tę samą wartość, jeśli oba konwersje są odbywa się na tej samej wersja programu SQL Server. Reprezentacja binarna wartość mogą ulec zmianie od wersja na wersja SQL Server.

Tekst można konwertować int, smallint, a tinyint Aby binary lub varbinary, ale po skonwertowaniu binary wartość z powrotem do całkowitą, wartość ta będzie się różnić od oryginalną wartość liczby całkowitej w przypadku obcinania. Na przykład następujące SELECT Instrukcja wskazuje, że wartość całkowita 123456 Zazwyczaj jest przechowywana w pliku binarnym 0x0001e240:

SELECT CAST( 123456 AS BINARY(4) )

Jednak następujące SELECT instrukcja pokazuje, że jeśli binary obiekt miejsce docelowe jest za mały, aby pomieścić całą wartość, cyfry początkowe są obcinane dyskretnie tak, aby ten sam numer jest przechowywana jako 0xe240:

SELECT CAST( 123456 AS BINARY(2) )

Następujących zadań wsadowych pokazuje, że to dyskretna obcinania może wpływać na operacji arytmetycznych bez podnoszenia błąd:

DECLARE @BinaryVariable2 BINARY(2)

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

SELECT CAST( @BinaryVariable2 AS INT)
GO

Wynik końcowy 57921, nie 123457.

Uwaga

Wpisz podczas konwersji między wszystkie dane oraz binary typy danych nie jest gwarantowane te same między wersjami SQL Server.

Konwertowanie do bitów danych

Konwertowanie na bit podwyższa dowolną wartość różną od zera do 1.

Konwertowanie znaków danych

Po znaku wyrażeń są konwertowane na typ danych dla znaków o różnych rozmiarach, wartości, które są zbyt długie dla nowego typu danych są obcinane.

Po wyrażeniu znak jest konwertowany na wyrażenie znak inny typ danych lub rozmiar, takie jak z char(5) Aby varchar(5), lub char(20) Aby char(15), sortowanie wartość wejściowa jest przypisany do przekonwertowanych wartości. Jeśli wyrażenie noncharacter zostanie przekonwertowany na typ danych znak, domyślnym sortowaniem bieżącej bazy danych jest przypisany do przekonwertowanych wartości.W obu przypadkach można przypisać za pomocą określonego sortowania SORTOWANIE klauzula.

Uwaga

Kod strona tłumaczenia są obsługiwane przez char i varchar typy danych, ale nie dla text Typ danych. Jak we wcześniejszych wersjach programu SQL Server, nie jest zgłaszane utraty danych podczas translacji strona kod.

Wyrażenia znaków, są konwertowane na przybliżony numeric Typ danych może zawierać opcjonalny zapis wykładniczy (mała litera e lub E wielkich następuje opcjonalne plus (+) lub minus (-), znak, a następnie numer).

Wyrażenia znaków, są konwertowane na dokładnie numeric Typ danych musi składać się z cyfr, z punktem dziesiętnym i opcjonalny plus (+) lub minus (-). Początkowe spacje są ignorowane.Przecinek separatory, takie jak tysięcy separator w 123,456.00, nie są dozwolone w ciąg.

Są konwertowane na wyrażeniach znaków money lub smallmoney typy danych może także zawierać programu opcjonalne przecinka dziesiętnego i znak dolara ($). Separatory przecinkami, jak w $ 123,456.00, są dozwolone.

W poniższym przykładzie pokazano, jak konwertować dane do wyświetlenia.W tym przykładzie konwertuje dane dotyczące sprzedaży przed wykonaniem porównania ciągów danych znakowych, a bieżącą data jest konwertowany na styl 3, dd/mm/rr.

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

W tym przykładzie konwertuje uniqueidentifier wartość do char Typ danych.

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

W tym przykładzie Konwertuje bieżącą data do stylu 3, dd/mm/rr.

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

Konwertowanie Data i godzina, Data

Podczas konwertowania date i time typy danych SQL Server odrzuca wszystkie wartości nie można rozpoznać jako daty i godziny. Aby zapoznać się z omówieniem wszystkich Transact-SQL Data i czas typów danych i funkcji, zobacz Date and Time Functions (Report Builder 1.0).

W poniższym przykładzie konwertuje date i datetime2 wartości varchar i binary typy danych, odpowiednio.

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)

Konwertowanie danych rzeczywistych i zmiennoprzecinkowych

Wartości float są obcinane podczas konwertowania na dowolny typ liczby całkowitej.

Jeśli chcesz przekonwertować z float lub real do danych znakowych przy użyciu funkcja str — ciąg jest zazwyczaj bardziej użyteczna niż (CAST). Dzieje się tak, ponieważ str — umożliwia większą kontrolę nad formatowaniem.Aby uzyskać więcej informacji zobacz Str — (języka Transact-SQL) i Functions (Transact-SQL).

Konwertowanie pieniędzy danych

Podczas konwertowania money od typu danych integer jednostki są traktowane jako w jednostki monetarnej. Na przykład całkowitą wartość 4 jest konwertowane na money jest to odpowiednik 4 jednostki monetarnej.

W poniższym przykładzie konwertuje smallmoney i money wartości varchar i decimal typy danych, odpowiednio.

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)

Konwertowanie danych dziesiętnych i liczbowe

Dla decimal i numeric typy danych SQL Server analizuje każdy określona kombinacja precyzja i Skala jak różne typy danych. Na przykład decimal(5,5) i decimal(5,0) są uważane za różne typy danych.

W Transact-SQL instrukcje, stała z przecinkiem dziesiętnym jest automatycznie konwertowany na numeric dane wartości, przy użyciu minimalnej precyzji i skali niezbędne. Na przykład stała 12.345 jest konwertowany na numeric wartość z dokładnością do 5 i skala jest równa 3.

Konwersja z typu decimal lub numeric Aby float lub real może spowodować utratę precyzji. Konwersja z typu int, smallint, tinyint, float, real, money, lub smallmoney do jednego decimal lub numeric może spowodować przepełnienie.

Domyślnie SQL Server używa zaokrąglania podczas konwersji liczby decimal lub numeric wartość z niższym precyzji i skali. Niemniej jednak, jeśli jest włączone, opcja ARITHABORT zestaw SQL Server wywołuje błąd, gdy występuje przepełnienie. Utrata tylko precyzji i skali nie są wystarczające do podniesienia błąd.

Konwertowanie liczby całkowitej danych

Kiedy liczb całkowitych niejawnie są konwertowane na typie danych znak, jeśli liczba całkowita jest za duży, aby umieścić pole znak SQL Server Wstawia znak ASCII 42, gwiazdka **.

Większa niż 2 147 483 647 są konwertowane na stałe całkowitą decimal Typ danych, nie bigint Typ danych. Poniższy przykład pokazuje, że po przekroczeniu wartości progowej, typu danych wyniku zmienia się z int Aby decimal.

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

Here is the result set.

Result1      Result2
1073741823   1073741824.500000

Konwersja typów danych przy użyciu automatyzacji OLE przechowywanych procedur

Ponieważ SQL Server używa Transact-SQL typy danych oraz używa automatyzacji OLE Visual Basic typy danych, usłudze automatyzacji OLE przechowywanych procedur należy konwertować dane przesyłane między sobą.

W poniższej tabela opisano SQL Server Aby Visual Basic Podczas konwersji typów danych.

Typ danych programu SQL Server

Typ danych języka Visual Basic

char, varchar, text, nvarchar, ntext

String

decimal, numeric

String

bit

Boolean

binary, varbinary, image

Jednowymiarowa Byte() Tablica

int

Long

smallint

Integer

tinyint

Byte

float

Double

real

Single

money, smallmoney

Currency

datetime, smalldatetime

Date

Wszystko co zestaw wartości null

Variant zestaw na wartości null

Wszystkie pojedyncze SQL Server wartości są konwertowane na pojedyncze Visual Basic wartości z wyjątkiem binary, varbinary, a image wartości. Te wartości są konwertowane na jednowymiarowe Byte() Macierz w 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.

Te są podczas konwersji z Visual Basic typy danych do SQL Server typy danych.

Typ danych języka Visual Basic

Typ danych programu SQL Server

Long, Integer, Byte, Boolean, Object

int

Double, Single

float

Currency

money

Date

datetime

String z 4000 znaków lub mniej

varchar/nvarchar

String z więcej niż 4000 znaków

text/ntext

Jednowymiarowa Byte() Tablica z 8000 bajtów lub mniej

varbinary

Jednowymiarowa Byte() Tablica z więcej niż 8000 bajtów

image