데이터 형식 사용
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
...
...