데이터 형식 사용

완료됨

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

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

정확한 수치

근사치

문자

날짜/시간

이진

기타

tinyint

떠다니다

char

date

이진법

커서

스몰인트

진짜 / 현실

varchar

time

varbinary

hierarchyid

정수 (int)

문자 메시지

날짜/시간

이미지

sql_variant

빅인트 (bigint)

nchar

datetime2

테이블

bit

nvarchar

스몰데이트타임

시간표시

10진/숫자

ntext

DateTimeOffset (날짜 및 시간 오프셋)

고유 식별자

숫자

xml

지리학

소액돈

기하학

참고

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

데이터 형식 변환

호환되는 데이터 형식의 값은 필요에 따라 암시적으로 변환될 수 있습니다. 예를 들어 연산자를 + 사용하여 수를 10진 수에 추가하거나 고정 길이 문자 값과 가변 길이 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 로드 프레임 - 블랙, 58

706: HL 로드 프레임 - 빨간색, 58

707: 스포츠-100 헬멧, 레드

708: 스포츠-100 헬멧, 블랙

...

그러나 Production.Product 테이블의 크기 열이 일부 숫자 크기(예: 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

없음

없음

...

숫자 데이터 형식으로 변환할 수 있는 값은 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 로드 프레임 - 블랙, 58

706: HL 로드 프레임 - 빨간색, 58

707: 스포츠-100 헬멧, 레드

708: 스포츠-100 헬멧, 블랙

...

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;

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

판매 시작일

시작 날짜

FormattedStartDate

2002-06-01T00:00:00.0000000

2002년 6월 1일 오전 12:00

6/1/2002

2002-06-01T00:00:00.0000000

2002년 6월 1일 오전 12:00

6/1/2002

2005-07-01T00:00:00.0000000

2005년 7월 1일 오전 12:00

7/1/2005

2005-07-01T00:00:00.0000000

2005년 7월 1일 오전 12:00

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;

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

날짜값

MoneyValue

2021-01-01T00:00:00.0000000

199.99

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

참고

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

STR

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

예를 들면 다음과 같습니다.

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

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

ProductID

Price

680

$1432.00

706

$1432.00

707

$35.00

...

...