다음을 통해 공유


변환 함수

SQL Server에서 자동으로 데이터 형식을 변환하지 않을 경우 CAST와 CONVERT 변환 함수를 사용하여 식의 데이터 형식을 다른 데이터 형식으로 변환할 수 있습니다. 예를 들어 char와 datetime 식, smallint와 int 식 또는 길이가 서로 다른 두 char 식을 비교하면 SQL Server에서 이를 자동으로 변환합니다. 이를 암시적 변환이라고 합니다. 이러한 암시적 변환에는 CAST나 CONVERT를 사용할 필요가 없습니다. 그러나 다음과 같은 변환 시나리오에서는 CAST와 CONVERT를 사용할 수 있습니다.

  • 두 식의 데이터 형식이 정확히 같을 때

  • 두 식을 암시적으로 변환할 수 있을 때

  • 명시적 데이터 형식 변환이 필요할 때

문자를 포함하는 char 식을 int로 변환하는 등 불가능한 변환을 시도하면 오류 메시지가 나타납니다.

CAST와 CONVERT 함수는 다양한 특수 데이터 형식을 가져오는 데 사용될 수 있고, WHERE 절의 SELECT 목록 및 식의 허용되는 모든 위치에서 사용 가능합니다.

SQL-92에 맞게 Transact-SQL 프로그램 코드를 변환하려면 CONVERT 대신 CAST를 사용하고, CONVERT의 기능이 필요하면 CAST 대신 CONVERT를 사용하십시오.

CAST나 CONVERT를 사용할 때는 다음 정보를 제공해야 합니다.

  • 변환할 식. 예를 들어 매출 보고서를 작성하려면 통화 데이터를 문자 데이터로 변환한 매출 데이터가 필요합니다.

  • 지정한 식을 변환할 데이터 형식. 예를 들면 varchar 또는 기타 SQL Server 시스템 데이터 형식입니다.

변환한 값을 저장하지 않는 한, 이 변환은 해당 CAST 또는 CONVERT 함수 실행 시간 중에만 유효합니다.

데이터 형식을 변환할 때 길이를 지정하지 않으면 SQL Server가 기본적으로 길이 30을 제공합니다.

다음 예의 첫 번째 SELECT 문에서는 CAST를 사용하고 두 번째 SELECT 문에서는 CONVERT를 사용하여 Title 열을 nvarchar(20) 열로 변환하여 제목 길이를 줄입니다.

USE AdventureWorks;
GO
SELECT CAST(Title AS nvarchar(20)) AS Title, Revision
FROM Production.Document
WHERE Revision < 2
GO

또는

USE AdventureWorks;
GO
SELECT CONVERT(nvarchar(20), Title) AS Title, Revision
FROM Production.Document
WHERE Revision < 2
GO

각 쿼리의 결과 집합은 다음과 같습니다.

Title                 Revision
--------------------  --------
Crank Arm and Tire M  0    
Front Reflector Brac  1    
Installing Replaceme  0    
Repair and Service G  0    
Training Wheels 2     1    

(5 row(s) affected)

다음 예에서는 HireDate 열과 datetime 열이 char(11) 열로 변환됩니다.

USE AdventureWorks
GO
SELECT c.FirstName, c.LastName, CAST(e.HireDate AS char(11)) AS HireDate 
FROM HumanResources.Employee e 
JOIN Person.Contact c ON e.EmployeeID = c.ContactID
WHERE c.FirstName = 'Kim'
GO

결과 집합은 다음과 같습니다.

FirstName       LastName                       HireDate
---------       -----------------------        -----------
Kim             Abercrombie                    Dec 12 1997
Kim             Akers                          Mar 23 1998

(2 row(s) affected)