데이터 형식 사용

완료됨

Transact-SQL에서 사용되는 열과 변수에는 각각의 ‘데이터 형식’이 있습니다. 식에서 값의 동작은 참조되는 열 또는 변수의 데이터 형식에 따라 달라집니다. 예를 들어 앞서 본 것처럼 + 연산자를 사용하여 두 문자열 값을 연결하거나 두 개의 숫자 값을 추가할 수 있습니다.

다음 표에서는 SQL Server 데이터베이스에서 지원되는 일반적인 데이터 형식을 보여 줍니다.

정확한 수치

근사치

문자

날짜/시간

이진

기타

tinyint

float

char

date

binary

cursor

smallint

real

varchar

time

varbinary

hierarchyid

int

text

Datetime

이미지

sql_variant

bigint

nchar

datetime2

테이블

bit

nvarchar

smalldatetime

timestamp

10진/숫자

ntext

datetimeoffset

uniqueidentifier

numeric

Xml

money

geography

smallmoney

geometry

참고

다양한 데이터 형식 및 해당 특성에 대한 자세한 내용은 Transact-SQL 참조 설명서를 참조하세요.

데이터 형식 변환

호환되는 데이터 형식의 값은 필요에 따라 암시적으로 변환될 수 있습니다. 예를 들어 + 연산자를 사용하여 정수를 10진수에 추가하거나 고정 길이 char 값과 가변 길이 varchar 값을 연결한다고 가정합니다. 그러나 경우에 따라 값을 한 데이터 형식에서 다른 데이터 형식으로 명시적으로 변환해야 할 수 있습니다. 예를 들어 +를 사용하여 varchar 값과 10진 값을 연결하려고 하면 숫자 값을 호환 가능한 문자열 데이터 형식으로 먼저 변환하지 않으면 오류가 발생합니다.

참고

암시적 및 명시적 변환은 특정 데이터 형식에 적용되며 일부 변환은 불가능합니다. 자세한 내용은 Transact-SQL 참조 설명서의 차트를 사용합니다.

T-SQL에는 데이터 형식을 명시적으로 변환하는 데 도움이 되는 함수가 포함되어 있습니다.

CAST 및 TRY_CAST

CAST 함수는 값이 대상 데이터 형식과 호환되는 경우 값을 지정된 데이터 형식으로 변환합니다. 호환되지 않는 경우 오류가 반환됩니다.

예를 들어 다음 쿼리에서는 CAST를 사용하여 ProductID 열의 ‘정수’ 값을 varchar 값(최대 4자)으로 변환하여 다른 문자 기반 값과 연결합니다.

SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;

이 쿼리에서 발생할 수 있는 결과는 다음과 같습니다.

ProductName

680: HL Road Frame - Black, 58

706: HL Road Frame - Red, 58

707: Sport-100 Helmet, Red

708: Sport-100 Helmet, Black

...

그러나 Production.Product 테이블의 Size 열이 일부 숫자 크기(예: 58)와 일부 텍스트 기반 크기(예: “S”, “M” 또는 “L”)를 포함하는 nvarchar(가변 길이, 유니코드 텍스트 데이터) 열이라고 가정합니다. 다음 쿼리는 이 열의 값을 ‘정수’ 데이터 형식으로 변환하고자 합니다.

SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;

쿼리를 실행하면 다음과 같은 오류 메시지가 표시됩니다.

오류: nvarchar 값 ‘M’을 int(정수) 데이터 형식으로 변환하지 못했습니다.

열에 있는 값 중 ‘일부’는 숫자이므로 숫자 값은 변환하고 다른 값은 무시할 수 있습니다. TRY_CAST 함수를 사용하여 데이터 형식을 변환할 수 있습니다.

SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;

이 시간이 표시되는 결과는 다음과 같습니다.

NumericSize

58

58

NULL

NULL

...

숫자 데이터 형식으로 변환할 수 있는 값은 ‘10진’ 값으로 반환되고 호환되지 않는 값은 값을 ‘알 수 없음’을 나타내는 NULL로 반환됩니다.

참고

이 단원의 뒷부분에서 NULL 값을 처리할 때 고려해야 할 사항을 살펴봅니다.

CONVERT 및 TRY_CONVERT

CAST는 데이터 형식 간의 변환을 위한 ANSI 표준 SQL 함수이며 많은 데이터베이스 시스템에서 사용됩니다. Transact-SQL에서도 다음과 같이 CONVERT 함수를 사용할 수 있습니다.

SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;

다시 한번 이 쿼리는 다음과 같이 지정된 데이터 형식으로 변환된 값을 반환합니다.

ProductName

680: HL Road Frame - Black, 58

706: HL Road Frame - Red, 58

707: Sport-100 Helmet, Red

708: Sport-100 Helmet, Black

...

CAST와 마찬가지로 CONVERT에는 호환되지 않는 값에 대해 NULL을 반환하는 TRY_CONVERT 변형이 있습니다.

CAST보다 CONVERT를 사용하는 것의 또 다른 이점은 숫자 및 날짜 값을 문자열로 변환할 때 매개 변수로 서식 스타일을 지정할 수 있다는 것입니다. 예를 들어 다음과 같은 쿼리를 고려해 보겠습니다.

SELECT SellStartDate,
       CONVERT(varchar(20), SellStartDate) AS StartDate,
       CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate 
FROM SalesLT.Product;

이 쿼리의 결과는 다음과 같을 수 있습니다.

SellStartDate

StartDate

FormattedStartDate

2002-06-01T00:00:00

Jun 1 2002 12:00AM

6/1/2002

2002-06-01T00:00:00

Jun 1 2002 12:00AM

6/1/2002

2005-07-01T00:00:00

Jul 1 2005 12:00AM

7/1/2005

2005-07-01T00:00:00

Jul 1 2005 12:00AM

7/1/2005

...

...

...

참고

CONVERT와 함께 사용할 수 있는 스타일 서식 지정 코드에 대한 자세한 내용은 Transact-SQL 참조 설명서를 참조하세요.

PARSE와 TRY_PARSE

PARSE 함수는 숫자 또는 날짜/시간 값을 나타내는 서식이 지정된 문자열을 변환하도록 설계되었습니다. 예를 들어 (테이블의 열 값 대신 리터럴 값을 사용하는) 다음 쿼리를 살펴보세요.

SELECT PARSE('01/01/2021' AS date) AS DateValue,
   PARSE('$199.99' AS money) AS MoneyValue;

이 쿼리의 결과는 다음과 같습니다.

DateValue

MoneyValue

2021-01-01T00:00:00

199.99

CAST 및 CONVERT와 마찬가지로 PARSE에는 호환되지 않는 값을 NULL로 반환하는 TRY_PARSE 변형이 있습니다.

참고

10진수 또는 숫자 데이터 형식으로 작업할 때 정수로 반올림하거나 소수점을 설정해야 할 수 있습니다. 이 소수점은 정밀도와 스케일링을 통해 달성할 수 있습니다. 정밀도 및 스케일링에 대한 이 개념을 더 잘 이해하려면 Transact-SQL 참조 설명서를 참조하세요.

STR

STR 함수는 숫자 값을 varchar로 변환합니다.

예를 들어:

SELECT ProductID,  '$' + STR(ListPrice) AS Price
FROM Production.Product;

결과는 다음과 같이 표시됩니다.

ProductID

가격

680

$1432.00

706

$1432.00

707

$35.00

...

...