데이터 형식 변환(데이터베이스 엔진)
데이터 형식은 다음 시나리오에서 변환할 수 있습니다.
한 개체의 데이터가 다른 개체의 데이터로 이동하거나 그 데이터와 비교되거나 결합되면 데이터는 그 개체의 데이터 형식에서 다른 개체의 데이터 형식으로 변환되어야 합니다.
Transact-SQL 결과 열, 반환 코드 또는 출력 매개 변수의 데이터가 프로그램 변수로 이동되면 데이터를 SQL Server 시스템 데이터 형식에서 변수의 데이터 형식으로 변환해야 합니다.
응용 프로그램 변수와 SQL Server 결과 집합 열, 반환 코드, 매개 변수 또는 매개 변수 표식 간에 변환할 때는 데이터베이스 API에 따라 지원되는 데이터 형식 변환이 정의됩니다.
암시적 및 명시적 변환
데이터 형식은 암시적으로 또는 명시적으로 변환할 수 있습니다.
암시적 변환은 사용자에게 보이지 않습니다. SQL Server는 데이터 형식을 자동으로 변환합니다. 예를 들어 smallint를 int와 비교하는 경우 smallint는 비교되기 전에 암시적으로 int로 변환됩니다.
GETDATE()는 암시적으로 날짜 스타일 0으로 변환합니다. SYSDATETIME()은 암시적으로 날짜 스타일 21로 변환합니다.
명시적 변환은 CAST 또는 CONVERT 함수를 사용합니다.
CAST 및 CONVERT 함수는 값(지역 변수, 열 또는 다른 식)의 데이터 형식을 변환합니다. 예를 들어 다음 CAST 함수는 $157.27의 숫자 값을 '157.27'의 문자열로 변환합니다.
CAST ( $157.27 AS VARCHAR(10) )
Transact-SQL 프로그램 코드를 ISO에 맞추려면 CONVERT 대신 CAT를 사용하고, CONVERT의 스타일 기능을 사용하려면 CAST 대신 CONVERT를 사용합니다.
다음 그림에서는 SQL Server 시스템 제공 데이터 형식에 허용된 모든 명시적 및 암시적 데이터 형식 변환을 보여 줍니다. xml, bigint 및 sql_variant가 있습니다. 할당 시 sql_variant 데이터 형식에서 암시적으로 변환되지는 않지만 sql_variant로는 암시적으로 변환됩니다.
데이터 형식 변환 동작
SQL Server 개체의 데이터 형식을 변환할 때 일부 암시적 및 명시적 데이터 형식 변환은 지원되지 않습니다. 예를 들면 nchar 값은 image 값으로 변환할 수 없습니다. nchar는 명시적 변환을 사용하여 binary로만 변환할 수 있습니다. binary로의 암시적 변환은 지원되지 않습니다. 그러나 nchar는 암시적으로나 명시적으로 nvarchar로 변환할 수 있습니다.
다음 항목에서는 해당 데이터 형식이 나타내는 변환 동작에 대해 설명합니다.
OLE 자동화 저장 프로시저를 사용하여 데이터 형식 변환
SQL Server는 Transact-SQL 데이터 형식을 사용하고 OLE 자동화는 Visual Basic 데이터 형식을 사용하므로 OLE 자동화 저장 프로시저는 이들 간에 전달되는 데이터를 변환해야 합니다.
다음 표에서는 SQL Server에서 Visual Basic 데이터 형식으로 변환하는 방법을 설명합니다.
SQL Server 데이터 형식 |
Visual Basic 데이터 형식 |
---|---|
char, varchar, text, nvarchar, ntext |
String |
decimal, numeric |
String |
bit |
Boolean |
binary, varbinary, image |
1차원 Byte() 배열 |
int |
Long |
smallint |
Integer |
tinyint |
Byte |
float |
Double |
real |
Single |
money, smallmoney |
Currency |
datetime, smalldatetime |
Date |
NULL로 설정된 모든 것 |
Null로 설정된 Variant |
단일 SQL Server 값은 binary, varbinary 및 image 값을 제외하고 모두 단일 Visual Basic 값으로 변환됩니다. 이러한 값은 Visual Basic의 1차원 Byte() 배열로 변환됩니다. 이 배열 범위는 Byte(0에서 length1)입니다. 여기서 length는 SQL Server binary, varbinary 또는 image 값의 바이트 수입니다.
이들은 Visual Basic 데이터 형식에서 SQL Server 데이터 형식으로 변환한 것입니다.
Visual Basic 데이터 형식 |
SQL Server 데이터 형식 |
---|---|
Long, Integer, Byte, Boolean, Object |
int |
Double, Single |
float |
Currency |
money |
Date |
datetime |
4000자 이하의 String |
varchar/nvarchar |
4000자를 초과하는 String |
text/ntext |
8000바이트 이하의 1차원 Byte() 배열 |
varbinary |
8000바이트를 초과하는 1차원 Byte() 배열 |
image |