CAST 및 CONVERT(Transact-SQL)
SQL Server 2008 R2에서 한 데이터 형식의 식을 다른 데이터 형식의 식으로 변환합니다.
구문
Syntax for CAST:
CAST ( expression AS data_type [ ( length ) ] )
Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
인수
expression
유효한 식입니다.data_type
대상 데이터 형식입니다. xml, bigint 및 sql_variant가 있습니다. 별칭 데이터 형식은 사용할 수 없습니다. 사용 가능한 데이터 형식에 대한 자세한 내용은 데이터 형식(Transact-SQL)을 참조하십시오.length
대상 데이터 형식의 길이를 지정하는 선택적 정수입니다. 기본값은 30입니다.style
CONVERT 함수가 expression을 변환하는 방법을 지정하는 정수 식입니다. 스타일이 NULL이면 NULL이 반환됩니다. 범위는 data_type에 의해 결정됩니다. 자세한 내용은 주의 섹션을 참조하십시오.
반환 형식
data_type으로 변환된 expression을 반환합니다.
주의
날짜 및 시간 스타일
expression이 날짜 또는 시간 데이터 형식이면 style은 다음 표에 있는 값 중 하나일 수 있습니다. 다른 값은 0으로 처리됩니다. SQL Server는 쿠웨이트 알고리즘을 사용하여 아랍어 스타일의 날짜 형식을 지원합니다.
두 자리 연도(yy)(1) |
네 자리 연도(yyyy) |
표준 |
입/출력(3) |
---|---|---|---|
- |
0 또는 100(1,2) |
기본값 |
mon dd yyyy hh:miAM(또는 PM) |
1 |
101 |
미국 |
mm/dd/yyyy |
2 |
102 |
ANSI |
yy.mm.dd |
3 |
103 |
영국/프랑스 |
dd/mm/yyyy |
4 |
104 |
독일 |
dd.mm.yy |
5 |
105 |
이탈리아 |
dd-mm-yy |
6 |
106(1) |
- |
dd mon yy |
7 |
107(1) |
- |
Mon dd, yy |
8 |
108 |
- |
hh:mi:ss |
- |
9 또는 109(1,2) |
기본값 + 밀리초 |
mon dd yyyy hh:mi:ss:mmmAM(또는 PM) |
10 |
110 |
미국 |
mm-dd-yy |
11 |
111 |
일본 |
yy/mm/dd |
12 |
112 |
ISO |
yymmdd yyyymmdd |
- |
13 또는 113(1,2) |
유럽 기본값 + 밀리초 |
dd mon yyyy hh:mi:ss:mmm(24h) |
14 |
114 |
- |
hh:mi:ss:mmm(24h) |
- |
20 또는 120(2) |
ODBC 표준 |
yyyy-mm-dd hh:mi:ss(24h) |
- |
21 또는 121(2) |
ODBC 표준(밀리초 포함) |
yyyy-mm-dd hh:mi:ss.mmm(24h) |
- |
126 (4) |
ISO8601 |
yyyy-mm-ddThh:mi:ss.mmm(공백 없이) |
- |
127(6, 7) |
ISO8601(Z 표준 시간대) |
yyyy-mm-ddThh:mi:ss.mmmZ (공백 없이) |
- |
130 (1,2) |
회교식(5) |
dd mon yyyy hh:mi:ss:mmmAM |
- |
131 (2) |
회교식(5) |
dd/mm/yy hh:mi:ss:mmmAM |
1 이러한 스타일 값은 비결정적 결과를 반환합니다. 모든 (yy)(두 자리 연도) 스타일과 (yyyy)(네 자리 연도) 스타일의 하위 집합을 포함합니다.
2 기본값(style0 또는 100, 9 또는 109, 13 또는 113, 20 또는 120, 21 또는 121인 경우)은 항상 네 자리 연도(yyyy)를 반환합니다.
3datetime으로 변환할 때의 입력이며 문자 데이터로 변환할 때의 출력입니다.
4 XML용으로 고안되었습니다. datetime 또는 smalldatetime을 문자 데이터로 변환하는 경우 출력 형식은 앞의 표에서 설명한 것과 같습니다.
5 회교식 달력 시스템에는 여러 가지 형태가 있는데 SQL Server에서는 쿠웨이트 알고리즘을 사용합니다.
중요 |
---|
기본적으로 SQL Server는 구분 연도 2049년을 기준으로 두 자리 연도를 해석합니다. 즉 두 자리 연도 49는 2049년을 의미하고 두 자리 연도 50은 1950년을 의미합니다. 자동화 개체를 기반으로 하는 응용 프로그램 등 많은 클라이언트 응용 프로그램에서는 2030년을 구분 연도로 사용합니다. SQL Server에서는 SQL Server에서 사용되는 구분 연도를 변경하는 two digit year cutoff 구성 옵션이 제공되므로 날짜를 일관성 있게 처리할 수 있습니다. 네 자리 연도를 지정하는 것이 더 편리합니다. |
6 문자 데이터를 datetime 또는 smalldatetime으로 캐스팅하는 경우에만 지원됩니다. 날짜 또는 시간 구성 요소만 나타내는 문자 데이터를 datetime 또는 smalldatetime 데이터 형식으로 캐스팅하면 지정되지 않은 시간 구성 요소는 00:00:00.000으로 설정되고 지정되지 않은 날짜 구성 요소는 1900-01-01로 설정됩니다.
7 선택적 표준 시간대 표시 Z를 사용하면 표준 시간대 정보가 있는 XML datetime 값을 표준 시간대가 없는 SQL Server datetime 값에 쉽게 매핑할 수 있습니다. Z는 표준 시간대 UTC-0에 대한 표시입니다. 다른 표준 시간대는 + 또는 - 방향의 HH:MM 오프셋으로 나타냅니다. 예를 들면 다음과 같습니다. 2006-12-12T23:45:12-08:00.
smalldatetime을 문자 데이터로 변환할 때는 초나 밀리초가 포함된 스타일이 해당 위치에 0으로 표시됩니다. datetime 또는 smalldatetime 값을 변환할 때는 알맞은 char 또는 varchar 데이터 형식 길이를 사용하여 필요 없는 날짜 부분을 잘라낼 수 있습니다.
시간이 포함된 스타일을 사용하여 문자 데이터에서 datetimeoffset으로 변환하면 결과에 표준 시간대 오프셋이 추가됩니다.
float 및 real 스타일
expression이 float 또는 real이면 style은 다음 표에 있는 값 중 하나일 수 있습니다. 다른 값은 0으로 처리됩니다.
값 |
출력 |
---|---|
0(기본값) |
최대 6자리 수입니다. 해당되는 경우 과학 표기법을 사용하십시오. |
1 |
항상 8자리 수입니다. 항상 과학 표기법을 사용하십시오. |
2 |
항상 16자리 수입니다. 항상 과학 표기법을 사용하십시오. |
126, 128, 129 |
이전 버전과의 호환성을 위해 제공되며 이후 릴리스에서는 더 이상 사용되지 않을 수 있습니다. |
money 및 smallmoney 스타일
expression이 money 또는 smallmoney이면 style은 다음 표에 있는 값 중 하나일 수 있습니다. 다른 값은 0으로 처리됩니다.
값 |
출력 |
---|---|
0(기본값) |
소수점 앞 세 자리마다 쉼표를 사용하지 않으며 소수점 이하 두 자리인 수입니다(예: 4235.98). |
1 |
소수점 앞 세 자리마다 쉼표가 있으며 소수점 이하 두 자리인 수입니다(예: 3,510.92). |
2 |
소수점 앞 세 자리마다 쉼표를 사용하지 않으며 소수점 이하 네 자리인 수입니다(예: 4235.9819). |
126 |
char(n) 또는 varchar(n)으로 변환하는 경우 스타일 2와 같습니다. |
xml 스타일
expression이 xml이면 style은 다음 표에 있는 값 중 하나일 수 있습니다. 다른 값은 0으로 처리됩니다.
값 |
출력 |
---|---|
0(기본값) |
불필요한 공백을 삭제하고 내부 DTD 하위 집합을 허용하지 않는 기본 구문 분석 동작을 사용합니다.
참고
xml 데이터 형식을 변환할 때 SQL Server에서는 불필요한 공백은 XML 1.0에서와 다르게 처리됩니다. 자세한 내용은 XML 인스턴스 생성을 참조하십시오.
|
1 |
불필요한 공백을 유지합니다. 이 스타일 설정에 따라 xml:space="preserve"가 대신 지정된 경우와 동일하게 동작하도록 기본 xml:space 처리가 설정됩니다. |
2 |
제한된 내부 DTD 하위 집합 처리를 설정합니다. 설정된 경우 서버가 내부 DTD 하위 집합에 제공된 다음 정보를 사용하여 유효성을 검사하지 않는 구문 분석 작업을 수행합니다.
파서가 외부 DTD 하위 집합을 무시합니다. 또한 standalone 특성이 yes로 설정되었는지 또는 no로 설정되었는지 확인하기 위해 XML 선언을 평가하지 않으며 대신 독립 실행형 문서처럼 XML 인스턴스를 구문 분석합니다. |
3 |
불필요한 공백을 유지하고 제한된 내부 DTD 하위 집합 처리를 설정합니다. |
이진 스타일
expression이 binary(n), varbinary(n), char(n) 또는 varchar(n)이면 style은 다음 표에 있는 값 중 하나일 수 있습니다. 여기에 없는 스타일 값은 오류를 반환합니다.
값 |
출력 |
---|---|
0(기본값) |
ASCII 문자를 이진 바이트로 또는 이진 바이트를 ASCII 문자로 변환합니다. 각 문자 또는 바이트는 1:1로 변환됩니다. data_type이 이진 형식이면 결과의 왼쪽에 문자 0x가 추가됩니다. |
1, 2 |
data_type이 이진 형식이면 식이 문자 식이어야 합니다. expression은 짝수 개의 16진수(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f)로 구성되어야 합니다. style이 1로 설정되면 문자 0x가 식의 처음 두 문자여야 합니다. 식에 홀수 개의 문자나 유효하지 않은 문자가 포함되어 있으면 오류가 발생합니다. 변환된 식의 길이가 data_type의 길이보다 길면 결과의 오른쪽이 잘립니다. 고정 길이 data_types이 변환된 결과보다 길면 결과의 오른쪽에 0이 추가됩니다. data_type이 문자 형식이면 식이 이진 식이어야 합니다. 각 이진 문자는 두 개의 16진수 문자로 변환됩니다. 변환된 식의 길이가 data_type 길이보다 길면 결과의 오른쪽이 잘립니다. data_type이 고정 크기 문자 형식이고 변환된 결과의 길이가 data_type의 길이보다 짧으면 짝수 개의 16진수가 유지되도록 변환된 식의 오른쪽에 공백이 추가됩니다. style 1의 경우 변환된 결과의 왼쪽에 문자 0x가 추가됩니다. |
암시적 변환
암시적 변환은 CAST 또는 CONVERT 함수를 지정하지 않은 상태에서 발생하는 변환이고 명시적 변환은 CAST 또는 CONVERT 함수를 지정해야 발생하는 변환입니다. 다음 그림에서는 SQL Server 시스템 제공 데이터 형식에 허용된 모든 명시적 및 암시적 데이터 형식 변환을 보여 줍니다. xml, bigint 및 sql_variant가 있습니다. sql_variant 데이터 형식에서 할당된 암시적 변환은 없지만 sql_variant로의 암시적 변환은 있습니다.
datetimeoffset과 문자 형식 char, varchar, nchar 및 nvarchar 간에 변환할 때 변환된 표준 시간대 오프셋 부분의 HH 및 MM 부분은 항상 두 자리여야 합니다(예: -08:00).
[!참고]
유니코드 데이터는 항상 짝수 바이트를 사용하므로 binary 또는 varbinary와 유니코드 지원 데이터 형식을 서로 변환할 때는 주의해야 합니다. 예를 들어 다음과 같은 변환은 16진수 값 41이 아니라 4100을 반환합니다. SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).
큰 값 데이터 형식
큰 값 데이터 형식은 작은 데이터 형식, 특히 varchar, nvarchar 및 varbinary 데이터 형식과 같은 암시적 및 명시적 변환 동작을 보입니다. 그러나 다음 지침을 고려해야 합니다.
image와 varbinary(max) 간의 변환은 암시적 변환이며 text와 varchar(max), ntext와 nvarchar(max) 간의 변환도 마찬가지입니다.
varchar(max) 등 큰 값 데이터 형식을 varchar 등의 작은 데이터 형식으로 변환하는 것은 암시적 변환이지만 작은 데이터 형식에 지정된 길이에 비해 큰 값이 너무 크면 값이 잘립니다.
varchar, nvarchar 또는 varbinary를 해당하는 큰 값 데이터 형식으로 변환하는 것은 암시적 변환입니다.
sql_variant 데이터 형식을 큰 값 데이터 형식으로 변환하는 것은 명시적 변환입니다.
큰 값 데이터 형식은 sql_variant 데이터 형식으로 변환할 수 없습니다.
Microsoft .NET Framework CLR(공용 언어 런타임) 사용자 정의 형식을 변환하는 방법은 사용자 정의 형식 작업 수행을 참조하십시오. xml 데이터 형식을 변환하는 방법은 XML 인스턴스 생성을 참조하십시오.
xml 데이터 형식
xml 데이터 형식을 명시적 또는 암시적으로 문자열 또는 이진 데이터 형식으로 변환할 때는 xml 데이터 형식의 내용이 일련의 규칙에 따라 직렬화됩니다. 이러한 규칙에 대한 자세한 내용은 XML 데이터 직렬화를 참조하십시오. XML을 CLR 사용자 정의 형식으로 변환하는 방법은 사용자 정의 형식 작업 수행을 참조하십시오. 다른 데이터 형식을 xml 데이터 형식으로 변환하는 방법도 XML 인스턴스 생성을 참조하십시오.
text 및 image 데이터 형식
text 및 image 데이터 형식에는 자동 데이터 형식 변환이 지원되지 않습니다. text 데이터를 문자 데이터로, image 데이터를 binary나 varbinary로 명시적으로 변환할 수 있지만 최대 길이는 8,000바이트입니다. 문자가 포함된 문자 식을 int로 변환하는 등 잘못된 변환을 시도하면 SQL Server에서 오류 메시지를 반환합니다.
출력 데이터 정렬
CAST 또는 CONVERT의 출력이 문자열이고 입력이 문자열일 때 출력의 데이터 정렬 및 데이터 정렬 레이블이 입력의 경우와 동일합니다. 입력이 문자열이 아닌 경우에는 출력에서 데이터베이스의 기본 데이터 정렬을 사용하며 강제할 수 있는 기본값의 데이터 정렬 레이블을 사용합니다. 자세한 내용은 선행 정렬(Transact-SQL)을 참조하십시오.
출력에 다른 데이터 정렬을 할당하려면 CAST 또는 CONVERT 함수의 결과 식에 COLLATE 절을 적용합니다. 예를 들면 다음과 같습니다.
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
결과 잘라내기 및 반올림
문자나 이진 식(char, nchar, nvarchar, varchar, binary 또는 varbinary)을 다른 데이터 형식을 가진 식으로 변환할 경우 결과 길이가 너무 짧아 데이터가 잘리거나 일부만 표시되거나 오류가 반환될 수 있습니다. char, varchar, nchar, nvarchar, binary 및 varbinary로 변환하면 다음 표에 있는 변환을 제외하고 결과가 잘립니다.
원래 데이터 형식 |
변경할 데이터 형식 |
결과 |
---|---|---|
int, smallint 또는 tinyint |
char |
* |
|
varchar |
* |
|
nchar |
E |
|
nvarchar |
E |
money, smallmoney, numeric, decimal, float 또는 real |
char |
E |
|
varchar |
E |
|
nchar |
E |
|
nvarchar |
E |
* = 결과 길이가 너무 짧아 표시되지 않습니다. E = 결과 길이가 너무 짧아 표시되지 않으므로 오류가 반환됩니다.
SQL Server에서는 원래 데이터 형식을 변환한 후 다시 원래 데이터 형식으로 변환하는 왕복 변환만 버전 간에 같은 값을 생성합니다. 다음 예에서는 이러한 왕복 변환을 보여 줍니다.
DECLARE @myval decimal (5, 2);
SET @myval = 193.57;
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5));
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval));
[!참고]
binary 값을 생성한 다음 숫자 데이터 형식 범주에 속하는 데이터 형식으로 변환하지 마십시오. SQL Server에서는 decimal 또는 numeric 데이터 형식을 binary로 변환하면 SQL Server 버전 간에 결과가 다를 수도 있습니다.
다음 예에서는 길이가 짧아 표시할 수 없는 결과 식을 보여 줍니다.
USE AdventureWorks2008R2;
GO
SELECT p.FirstName, p.LastName, SUBSTRING(p.Title, 1, 25) AS Title, CAST(e.SickLeaveHours AS char(1)) AS 'Sick Leave'
FROM HumanResources.Employee e
JOIN Person.Person p ON e.BusinessEntityID = p.BusinessEntityID
WHERE NOT e.BusinessEntityID >5;
결과 집합은 다음과 같습니다.
FirstName LastName Title Sick Leave
--------- ------------- ---------- -----------
Ken Sanchez NULL *
Terri Duffy NULL *
Roberto Tamburello NULL *
Rob Walters NULL *
Gail Erickson Ms. *
(5 row(s) affected)
소수 자릿수가 다른 데이터 형식을 변환할 경우 결과 값이 잘리거나 반올림될 수 있습니다. 다음 표에서는 이러한 동작을 보여 줍니다.
원래 데이터 형식 |
변경된 데이터 형식 |
동작 |
---|---|---|
numeric |
numeric |
반올림 |
numeric |
int |
잘라내기 |
numeric |
money |
반올림 |
money |
int |
반올림 |
money |
numeric |
반올림 |
float |
int |
잘라내기 |
float |
numeric |
반올림 과학적 표기법을 사용하는 float 값은 전체 자릿수가 17자리 이하인 경우에만 decimal 또는 numeric으로 변환할 수 있습니다. 전체 자릿수가 17보다 큰 값은 0으로 반올림됩니다. |
float |
datetime |
반올림 |
datetime |
int |
반올림 |
예를 들어 다음 변환의 결과는 10입니다.
SELECT CAST(10.6496 AS int)
대상 데이터 형식의 소수 자릿수가 원본 데이터 형식의 소수 자릿수보다 적은 데이터 형식을 변환할 경우 값이 반올림됩니다. 예를 들어 다음 변환의 결과는 $10.3497입니다.
SELECT CAST(10.3496847 AS money)
숫자가 아닌 char, nchar, varchar 또는 nvarchar 데이터가 int, float, numeric 또는 decimal로 변환되면 SQL Server에서 오류 메시지를 반환합니다. 빈 문자열(" ")을 numeric이나 decimal로 변환해도 SQL Server에서 오류를 반환합니다.
SQL Server 2005 이상 버전에서 일부 datetime 변환은 결정적이지 않음
SQL Server 2000에서는 문자열과 날짜 및 시간 간의 변환이 결정적인 변환으로 표시됩니다. 그러나 다음 표에 나열된 스타일에는 해당되지 않습니다. 이러한 스타일의 경우 언어 설정에 따라 변환이 결정됩니다. SQL Server 2005 이상 버전에서는 이러한 변환을 비결정적 변환으로 표시합니다.
다음 표에서는 문자열에서 datetime으로의 변환이 비결정적인 스타일을 나열합니다.
1001 아래의 모든 스타일 |
106 |
107 |
109 |
113 |
130 |
1 스타일 20 및 21 제외
예
1. CAST 및 CONVERT 모두 사용
각 예에서는 제품 가격 첫 자리에 3이 있는 제품의 이름을 검색하고 ListPrice를 int로 변환합니다.
-- Use CAST
USE AdventureWorks2008R2;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CAST(ListPrice AS int) LIKE '3%';
GO
-- Use CONVERT.
USE AdventureWorks2008R2;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CONVERT(int, ListPrice) LIKE '3%';
GO
2. 산술 연산자와 CAST 사용
다음 예에서는 총 연간 매출(SalesYTD)을 커미션 비율(CommissionPCT)로 나누어 한 열을 계산(Computed)합니다. 이 결과는 가장 근사한 정수로 반올림된 후 int 데이터 형식으로 변환됩니다.
USE AdventureWorks2008R2;
GO
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS 'Computed'
FROM Sales.SalesPerson
WHERE CommissionPCT != 0;
GO
결과 집합은 다음과 같습니다.
Computed
------
379753754
346698349
257144242
176493899
281101272
0
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107
(14 row(s) affected)
3. CAST를 사용하여 연결
다음 예에서는 CAST를 사용하여 문자가 아니고 이진이 아닌 식을 연결합니다.
USE AdventureWorks2008R2;
GO
SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice
FROM Production.Product
WHERE ListPrice BETWEEN 350.00 AND 400.00;
GO
결과 집합은 다음과 같습니다.
ListPrice
------------------
The list price is 357.06
The list price is 364.09
The list price is 364.09
The list price is 364.09
The list price is 364.09
(5 row(s) affected)
4. CAST를 사용하여 읽기 쉬운 텍스트 만들기
다음 예에서는 SELECT 목록에 CAST를 사용하여 Name 열을 char(10) 열로 변환합니다.
USE AdventureWorks2008R2;
GO
SELECT DISTINCT CAST(p.Name AS char(10)) AS Name, s.UnitPrice
FROM Sales.SalesOrderDetail s JOIN Production.Product p on s.ProductID = p.ProductID
WHERE Name LIKE 'Long-Sleeve Logo Jersey, M';
GO
결과 집합은 다음과 같습니다.
Name UnitPrice
---------- ---------------------
Long-Sleev 31.2437
Long-Sleev 32.4935
Long-Sleev 49.99
(3 row(s) affected)
5. LIKE 절과 CAST 사용
다음 예에서는 LIKE 절과 함께 사용할 수 있도록 money 열인 SalesYTD를 int로 변환한 다음 char(20) 열로 변환합니다.
USE AdventureWorks2008R2;
GO
SELECT p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID
FROM Person.Person p JOIN Sales.SalesPerson s ON p.BusinessEntityID = s.BusinessEntityID
WHERE CAST(CAST(s.SalesYTD AS int) AS char(20)) LIKE '2%';
GO
결과 집합은 다음과 같습니다.
FirstName LastName SalesYTD SalesPersonID
---------------- ------------------- ---------------- -------------
Tsvi Reiter 2811012.7151 279
Syed Abbas 219088.8836 288
Rachel Valdez 2241204.0424 289
(3 row(s) affected)
6. 형식화된 XML과 함께 CONVERT 또는 CAST 사용
다음 몇 가지 예에서는 xml 데이터 형식을 사용하여 형식화된 XML로 변환하기 위해 CONVERT를 사용하는 방법을 보여 줍니다.
이 예에서는 공백, 텍스트 및 태그가 있는 문자열을 형식화된 XML로 변환하고 불필요한 공백(노드 사이의 경계 공백)을 모두 제거합니다.
CONVERT(XML, '<root><child/></root>')
이 예에서는 공백, 텍스트 및 태그가 있는 비슷한 문자열을 형식화된 XML로 변환하고 불필요한 공백(노드 사이의 경계 공백)을 유지합니다.
CONVERT(XML, '<root> <child/> </root>', 1)
이 예에서는 공백, 텍스트 및 태그가 있는 문자열을 형식화된 XML로 캐스팅합니다.
CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>' AS XML)
자세한 내용은 XML 인스턴스 생성을 참조하십시오.
7. datetime 데이터와 함께 CAST 및 CONVERT 사용
다음 예에서는 현재 날짜와 시간을 표시하고, CAST를 사용하여 현재 날짜와 시간을 문자 데이터 형식으로 변경한 다음, CONVERT를 사용하여 ISO 8901 형식으로 날짜와 시간을 표시합니다.
SELECT
GETDATE() AS UnconvertedDateTime,
CAST(GETDATE() AS nvarchar(30)) AS UsingCast,
CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601 ;
GO
결과 집합은 다음과 같습니다.
UnconvertedDateTime UsingCast UsingConvertTo_ISO8601
----------------------- ------------------------------ ------------------------------
2006-04-18 09:58:04.570 Apr 18 2006 9:58AM 2006-04-18T09:58:04.570
(1 row(s) affected)
다음 예에서는 이전 예와 반대로 수행합니다. 즉, 날짜와 시간을 문자 데이터로 표시하고, CAST를 사용하여 문자 데이터를 datetime 데이터 형식으로 변경한 다음, CONVERT를 사용하여 문자 데이터를 datetime 데이터 형식으로 변경합니다.
SELECT
'2006-04-25T15:50:59.997' AS UnconvertedText,
CAST('2006-04-25T15:50:59.997' AS datetime) AS UsingCast,
CONVERT(datetime, '2006-04-25T15:50:59.997', 126) AS UsingConvertFrom_ISO8601 ;
GO
결과 집합은 다음과 같습니다.
UnconvertedText UsingCast UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2006-04-25T15:50:59.997 2006-04-25 15:50:59.997 2006-04-25 15:50:59.997
(1 row(s) affected)
8. 이진 및 문자 데이터와 함께 CONVERT 사용
다음 예에서는 다양한 스타일을 사용하여 이진 및 문자 데이터를 변환한 결과를 보여 줍니다.
--Convert the binary value 0x4E616d65 to a character value.
SELECT CONVERT(char(8), 0x4E616d65, 0) AS 'Style 0, binary to character'
결과 집합은 다음과 같습니다.
Style 0, binary to character
----------------------------
Name
(1 row(s) affected)
--The following example shows how Style 1 can force the result
--to be truncated. The truncation is caused by
--including the characters 0x in the result.
SELECT CONVERT(char(8), 0x4E616d65, 1) AS 'Style 1, binary to character'
결과 집합은 다음과 같습니다.
Style 1, binary to character
------------------------------
0x4E616D
(1 row(s) affected)
--The following example shows that Style 2 does not truncate the
--result because the characters 0x are not included in
--the result.
SELECT CONVERT(char(8), 0x4E616d65, 2) AS 'Style 2, binary to character'
결과 집합은 다음과 같습니다.
Style 2, binary to character
------------------------------
4E616D65
(1 row(s) affected)
--Convert the character value 'Name' to a binary value.
SELECT CONVERT(binary(8), 'Name', 0) AS 'Style 0, character to binary'
결과 집합은 다음과 같습니다.
Style 0, character to binary
----------------------------------
0x4E616D6500000000
(1 row(s) affected)
SELECT CONVERT(binary(4), '0x4E616D65', 1) AS 'Style 1, character to binary'
결과 집합은 다음과 같습니다.
Style 1, character to binary
----------------------------------
0x4E616D65
(1 row(s) affected)
SELECT CONVERT(binary(4), '4E616D65', 2) AS 'Style 2, character to binary'
결과 집합은 다음과 같습니다.
Style 2, character to binary
----------------------------------
0x4E616D65
(1 row(s) affected)