데이터 형식 변환(데이터베이스 엔진)
적용 대상: Microsoft Fabric의 Microsoft FabricWarehouse에 있는 SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform System(PDW) SQL 분석 엔드포인트
데이터 형식은 다음 시나리오에서 변환할 수 있습니다.
- 한 개체의 데이터가 다른 개체의 데이터로 이동하거나 그 데이터와 비교되거나 결합되면 데이터는 그 개체의 데이터 형식에서 다른 개체의 데이터 형식으로 변환되어야 합니다.
- 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 대신 CAST를 사용하고, CONVERT 대신 CONVERT를 사용하여 CONVERT의 스타일 기능을 활용합니다.
다음 그림에서는 SQL Server 시스템 제공 데이터 형식에 허용되는 모든 명시적 및 암시적 데이터 형식 변환을 보여 줍니다. 여기에는 xml, bigint 및 sql_variant가 포함됩니다. 할당 시 sql_variant 데이터 형식에서 암시적으로 변환되지는 않지만 sql_variant로는 암시적으로 변환됩니다.
위의 차트는 SQL Server에서 허용되는 모든 명시적 및 암시적 변환을 보여 주지만 변환의 결과 데이터 형식을 나타내지는 않습니다. SQL Server가 명시적 변환을 수행하는 경우 문 자체가 결과 데이터 형식을 결정합니다. 암시적 변환의 경우 변수 값을 설정하거나 열에 값을 삽입하는 것과 같은 할당 문은 변수 선언 또는 열 정의에 의해 정의된 데이터 형식이 됩니다. 비교 연산자 또는 기타 식의 경우 결과 데이터 형식은 데이터 형식 우선 순위 규칙에 따라 달라집니다.
예를 들어 다음 스크립트는 형식의 변수를 정의하고, 변수 varchar
에 형식 값을 할당 int
한 다음, 문자열이 있는 변수의 연결을 선택합니다.
DECLARE @string VARCHAR(10);
SET @string = 1;
SELECT @string + ' is a string.'
값 1
은 int
값으로 varchar
변환되므로 문은 SELECT
값을 1 is a string.
반환합니다.
다음 예제에서는 변수가 있는 유사한 스크립트를 int
대신 보여 있습니다.
DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + ' is not a string.'
이 경우 SELECT
문은 다음 오류를 발생시킵니다.
Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value ' is not a string.' to data type int.
식을 @notastring + ' is not a string.'
평가하기 위해 SQL Server는 데이터 형식 우선 순위 규칙을 따라 식의 결과를 계산하기 전에 암시적 변환을 완료합니다. SQL Server는 우선 순위가 더 varchar
높기 때문에 int
문자열을 정수로 변환하려고 시도하고 이 문자열을 정수로 변환할 수 없으므로 실패합니다. 식이 변환할 수 있는 문자열을 제공하는 경우 다음 예제와 같이 문이 성공합니다.
DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + '1'
이 경우 문자열 1
을 정수 값 1
으로 변환할 수 있으므로 이 SELECT
문은 값을 2
반환합니다. 제공된 데이터 형식이 정수인 경우 +
연산자는 연결이 아닌 추가가 됩니다.
데이터 형식 변환 동작
한 SQL Server 개체의 데이터 형식을 다른 SQL Server 개체로 변환하는 경우 일부 암시적 및 명시적 데이터 형식 변환은 지원되지 않습니다. 예를 들어 nchar 값을 이미지 값으로 변환할 수 없습니다. nchar는 명시적 변환을 사용하여 이진으로만 변환할 수 있으며 이진으로의 암시적 변환은 지원되지 않습니다. 그러나 nchar는 암시적으로나 명시적으로 nvarchar로 변환할 수 있습니다.
다음 항목에서는 해당 데이터 형식이 나타내는 변환 동작에 대해 설명합니다.
- binary 및 varbinary(Transact-SQL)
- datetime2(Transact-SQL)
- money 및 smallmoney(Transact-SQL)
- bit(Transact-SQL)
- datetimeoffset(Transact-SQL)
- smalldatetime(Transact-SQL)
- char 및 varchar(Transact-SQL)
- decimal 및 numeric(Transact-SQL)
- sql_variant(Transact-SQL)
- date(Transact-SQL)
- float 및 real(Transact-SQL)
- time(Transact-SQL)
- datetime(Transact-SQL)
- int, bigint, smallint 및 tinyint(Transact-SQL)
- uniqueidentifier(Transact-SQL)
OLE 자동화 저장 프로시저를 사용하여 데이터 형식 변환
SQL Server는 Transact-SQL 데이터 형식을 사용하고 OLE Automation은 Visual Basic 데이터 형식을 사용하므로 OLE Automation 저장 프로시저는 이들 간에 전달되는 데이터를 변환해야 합니다.
다음 표에서는 SQL Server에서 Visual Basic 데이터 형식으로의 변환에 대해 설명합니다.
SQL Server 데이터 형식 | Visual Basic 데이터 형식 |
---|---|
char, varchar, text, nvarchar, ntext | String |
decimal, numeric | String |
bit | 부울 |
binary, varbinary, image | 1차원 Byte() 배열 |
int | Long |
smallint | 정수 |
tinyint | Byte |
float | double |
real | Single |
money, smallmoney | 통화 |
datetime, smalldatetime | 날짜 |
NULL로 설정된 모든 항목 | Null로 설정된 변형 |
모든 단일 SQL Server 값은 이진, varbinary 및 이미지 값을 제외하고 단일 Visual Basic 값으로 변환됩니다. 이러한 값은 Visual Basic에서 1차원 바이트() 배열로 변환됩니다. 이 배열에는 Byte(0에서 length 1까지)의 범위가 포함됩니다. 여기서 length는 SQL Server binary, varbinary 또는 image 값의 바이트 수입니다.
Visual Basic 데이터 형식에서 SQL Server 데이터 형식으로의 변환입니다.
Visual Basic 데이터 형식 | SQL Server 데이터 형식 |
---|---|
Long, Integer, Byte, Boolean, Object | int |
Double, Single | float |
통화 | money |
날짜 | datetime |
4000자 이하의 문자열 | varchar/nvarchar |
4,000자 이상의 문자열 | text/ntext |
8000바이트 이하의 1차원 Byte() 배열 | varbinary |
8000바이트를 초과하는 1차원 Byte() 배열 | image |
참고 항목
OLE 자동화 저장 프로시저(Transact-SQL)
CAST 및 CONVERT(Transact-SQL)
데이터 형식(Transact-SQL)
COLLATE(Transact-SQL)
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기