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