CAST 및 CONVERT(Transact-SQL)CAST and CONVERT (Transact-SQL)

이 항목은 다음에 적용됩니다. 예SQL Server(2008부터)예Azure SQL Database예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

이러한 함수는 한 데이터 형식의 식을 다른 데이터 형식의 식으로 변환합니다.These functions convert an expression of one data type to another.

예: 입력된 데이터 형식 변경Example: Change the input datatype

캐스트Cast

SELECT 9.5 AS Original, CAST(9.5 AS int) AS int, 
    CAST(9.5 AS decimal(6,4)) AS decimal;

변환Convert


SELECT 9.5 AS Original, CONVERT(int, 9.5) AS int, 
    CONVERT(decimal(6,4), 9.5) AS decimal;

결과 집합은 다음과 같습니다.Here is the result set.

OriginalOriginal ssNoversionint Decimaldecimal
9.59.5 99 9.50009.5000

이 항목의 뒷부분에 나오는 를 참조하십시오.See the examples later in this topic.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

-- CAST Syntax:  
CAST ( expression AS data_type [ ( length ) ] )  

-- CONVERT Syntax:  
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )  

인수Arguments

expressionexpression
유효한 입니다.Any valid expression.

data_typedata_type
대상 데이터 형식입니다.The target data type. 여기에는 xml, bigintsql_variant가 있습니다.This includes xml, bigint, and sql_variant. 별칭 데이터 형식은 사용할 수 없습니다.Alias data types cannot be used.

lengthlength
대상 데이터 형식의 길이를 지정하는 선택적 정수입니다.An optional integer that specifies the length of the target data type. 기본값은 30입니다.The default value is 30.

stylestyle
CONVERT 함수가 을 변환하는 방법을 지정하는 정수 식입니다.An integer expression that specifies how the CONVERT function will translate expression. NULL 스타일 값은 NULL을 반환합니다.For a style value of NULL, NULL is returned. data_type은 범위를 결정합니다.data_type determines the range.

반환 형식Return types

data_type으로 변환된 을 반환합니다.Returns expression, translated to data_type.

날짜 및 시간 스타일Date and Time Styles

날짜 또는 시간 데이터 형식 인 경우 스타일은 다음 표에 있는 값 중 하나일 수 있습니다.For a date or time data type expression, style can have one of the values shown in the following table. 다른 값은 0으로 처리됩니다.Other values are processed as 0. SQL Server 2012(11.x)SQL Server 2012 (11.x)부터 날짜 및 시간 형식에서 datetimeoffset으로 변환할 때 지원되는 유일한 스타일은 0 또는 1입니다.Beginning with SQL Server 2012(11.x)SQL Server 2012 (11.x), the only styles supported, when converting from date and time types to datetimeoffset, are 0 or 1. 다른 모든 변환 스타일은 오류 9809를 반환합니다.All other conversion styles return error 9809.

참고

SQL ServerSQL Server는 쿠웨이트 알고리즘을 통해 아랍어 스타일의 날짜 형식을 지원합니다. supports the date format, in Arabic style, with the Kuwaiti algorithm.

두 자리 연도(yy) (1)Without century (yy) (1) 네 자리 연도(yyyy)With century (yyyy) 표준Standard 입/출력(3)Input/Output (3)
- 0 또는 100 (1,2)0 or 100 (1,2) datetime 및 smalldatetime의 기본값Default for datetime and smalldatetime mon dd yyyy hh:miAM(또는 PM)mon dd yyyy hh:miAM (or PM)
11 101101 미국U.S. 1 = mm/dd/yy1 = mm/dd/yy
101 = mm/dd/yyyy101 = mm/dd/yyyy
22 102102 ANSIANSI 2 = yy.mm.dd2 = yy.mm.dd
102 = yyyy.mm.dd102 = yyyy.mm.dd
33 103103 영국/프랑스British/French 3 = dd/mm/yy3 = dd/mm/yy
103 = dd/mm/yyyy103 = dd/mm/yyyy
44 104104 독일어German 4 = dd.mm.yy4 = dd.mm.yy
104 = dd.mm.yyyy104 = dd.mm.yyyy
55 105105 이탈리아어Italian 5 = dd-mm-yy5 = dd-mm-yy
105 = dd-mm-yyyy105 = dd-mm-yyyy
66 106 (1)106 (1) - 6 = dd mon yy6 = dd mon yy
106 = dd mon yyyy106 = dd mon yyyy
77 107 (1)107 (1) - 7 = Mon dd, yy7 = Mon dd, yy
107 = Mon dd, yyyy107 = Mon dd, yyyy
88 108108 - hh:mi:sshh:mi:ss
- 9 또는 109 (1,2)9 or 109 (1,2) 기본값 + 밀리초Default + milliseconds mon dd yyyy hh:mi:ss:mmmAM(또는 PM)mon dd yyyy hh:mi:ss:mmmAM (or PM)
1010 110110 USAUSA 10 = mm-dd-yy10 = mm-dd-yy
110 = mm-dd-yyyy110 = mm-dd-yyyy
1111 111111 일본JAPAN 11 = yy/mm/dd11 = yy/mm/dd
111 = yyyy/mm/dd111 = yyyy/mm/dd
1212 112112 ISOISO 12 = yymmdd12 = yymmdd
112 = yyyymmdd112 = yyyymmdd
- 13 또는 113 (1,2)13 or 113 (1,2) 유럽 기본값 + 밀리초Europe default + milliseconds dd mon yyyy hh:mi:ss:mmm(24h)dd mon yyyy hh:mi:ss:mmm(24h)
1414 114114 - hh:mi:ss:mmm(24h)hh:mi:ss:mmm(24h)
- 20 또는 120 (2)20 or 120 (2) ODBC 표준ODBC canonical yyyy-mm-dd hh:mi:ss(24h)yyyy-mm-dd hh:mi:ss(24h)
- 21 또는 121 (2)21 or 121 (2) time, date, datetime2 및 datetimeoffset의 ODBC 표준(밀리초 포함) 기본값ODBC canonical (with milliseconds) default for time, date, datetime2, and datetimeoffset yyyy-mm-dd hh:mi:ss.mmm(24h)yyyy-mm-dd hh:mi:ss.mmm(24h)
- 126 (4)126 (4) ISO8601ISO8601 yyyy-mm-ddThh:mi:ss.mmm(공백 없이)yyyy-mm-ddThh:mi:ss.mmm (no spaces)

참고: 밀리초(mmm) 값 0의 경우 밀리초 소수 부분 값이 표시되지 않습니다.Note: For a milliseconds (mmm) value of 0, the millisecond decimal fraction value will not display. 예를 들어 '2012-11-07T18:26:20.000' 값은 '2012-11-07T18:26:20'으로 표시됩니다.For example, the value '2012-11-07T18:26:20.000 displays as '2012-11-07T18:26:20'.
- 127(6, 7)127(6, 7) ISO8601(Z 표준 시간대)ISO8601 with time zone Z. yyyy-mm-ddThh:mi:ss.mmmZ (공백 없이)yyyy-mm-ddThh:mi:ss.mmmZ (no spaces)

참고: 밀리초(mmm) 값 0의 경우 밀리초 소수 값이 표시되지 않습니다.Note: For a milliseconds (mmm) value of 0, the millisecond decimal value will not display. 예를 들어, '2012-11-07T18:26:20.000' 값은 '2012-11-07T18:26:20'으로 표시됩니다.For example, the value '2012-11-07T18:26:20.000 will display as '2012-11-07T18:26:20'.
- 130 (1,2)130 (1,2) 회교식(5)Hijri (5) dd mon yyyy hh:mi:ss:mmmAMdd mon yyyy hh:mi:ss:mmmAM

이 스타일에서 mon은 전체 월 이름에 대한 다중 토큰 회교식 유니코드 표현을 나타냅니다.In this style, mon represents a multi-token Hijri unicode representation of the full month name. 이 값은 SSMS의 기본 미국 영어 설치에서 올바르게 렌더링되지 않습니다.This value does not render correctly on a default US installation of SSMS.
- 131 (2)131 (2) 회교식(5)Hijri (5) dd/mm/yyyy hh:mi:ss:mmmAMdd/mm/yyyy hh:mi:ss:mmmAM

1 이러한 스타일 값은 비결정적 결과를 반환합니다.1 These style values return nondeterministic results. 모든 (yy)(두 자리 연도) 스타일과 (yyyy)(네 자리 연도) 스타일의 하위 집합을 포함합니다.Includes all (yy) (without century) styles and a subset of (yyyy) (with century) styles.

2 기본값(0 또는 100, 9 또는 109, 13 또는 113, 20 또는 12021 또는 121)은 항상 네 자리 연도(yyyy)를 반환합니다.2 The default values (0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).

3 datetime으로 변환할 때의 입력이며 문자 데이터로 변환할 때의 출력입니다.3 Input when you convert to datetime; output when you convert to character data.

4 XML용으로 고안되었습니다.4 Designed for XML use. datetime 또는 smalldatetime을 문자 데이터로 변환하는 경우 출력 형식은 앞의 표를 참조하세요.For conversion from datetime or smalldatetime to character data, see the previous table for the output format.

5 회교식 달력 시스템에는 여러 가지 형태가 있는데5 Hijri is a calendar system with several variations. SQL ServerSQL Server에서는 쿠웨이트 알고리즘을 사용합니다. uses the Kuwaiti algorithm.

중요

기본적으로 SQL ServerSQL Server는 구분 연도 2049년을 기준으로 두 자리 연도를 해석합니다.By default, SQL ServerSQL Server interprets two-digit years based on a cutoff year of 2049. SQL Server는 두 자릿수 연도 49를 2049로, 50을 1950으로 해석합니다.That means that SQL Server interprets the two-digit year 49 as 2049 and the two-digit year 50 as 1950. Automation 개체를 기반으로 하는 응용 프로그램 등 많은 클라이언트 응용 프로그램에서는 2030년을 구분 연도로 사용합니다.Many client applications, including those based on Automation objects, use a cutoff year of 2030. SQL ServerSQL Server에서는 SQL ServerSQL Server의 구분 연도를 변경하기 위한 두 자리 연도 구분 구성 옵션을 제공합니다. provides the two digit year cutoff configuration option to change the cutoff year used by SQL ServerSQL Server. 이를 통해 날짜를 일관성 있게 처리할 수 있습니다.This allows for the consistent treatment of dates. 네 자리 연도를 지정하는 것이 더 편리합니다.We recommend specifying four-digit years.

6 문자 데이터를 datetime 또는 smalldatetime으로 캐스팅하는 경우에만 지원됩니다.6 Only supported when casting from character data to datetime or smalldatetime. 날짜 또는 시간 구성 요소만 나타내는 문자 데이터를 datetime 또는 smalldatetime 데이터 형식으로 캐스팅하면 지정되지 않은 시간 구성 요소는 00:00:00.000으로 설정되고 지정되지 않은 날짜 구성 요소는 1900-01-01로 설정됩니다.When casting character data representing only date or only time components to the datetime or smalldatetime data types, the unspecified time component is set to 00:00:00.000, and the unspecified date component is set to 1900-01-01.

7 선택적 표준 시간대 표시기 Z를 사용하면 표준 시간대 정보가 있는 XML datetime 값을 표준 시간대가 없는 SQL ServerSQL Server datetime 값에 쉽게 매핑할 수 있습니다.7Use the optional time zone indicator Z to make it easier to map XML datetime values that have time zone information to SQL ServerSQL Server datetime values that have no time zone. Z는 UTC-0 시간대를 나타냅니다.Z indicates time zone UTC-0. + 또는 - 방향의 HH:MM 오프셋으로 다른 시간대를 나타냅니다.The HH:MM offset, in the + or - direction, indicates other time zones. 예를 들어 2006-12-12T23:45:12-08:00을 참조하십시오.For example: 2006-12-12T23:45:12-08:00.

smalldatetime을 문자 데이터로 변환할 때는 초나 밀리초가 포함된 스타일이 해당 위치에 0으로 표시됩니다.When converting smalldatetime to character data, the styles that include seconds or milliseconds show zeros in these positions. datetime 또는 smalldatetime 값을 변환할 때는 적합한 char 또는 varchar 데이터 형식 길이를 사용하여 불필요한 날짜 부분을 자를 수 있습니다.When converting from datetime or smalldatetime values, use an appropriate char or varchar data type length to truncate unwanted date parts.

시간이 포함된 스타일을 사용하여 문자 데이터에서 datetimeoffset으로 변환할 때는 결과에 표준 시간대 오프셋이 추가됩니다.When converting character data to datetimeoffset, using a style that includes a time, a time zone offset is appended to the result.

float 및 real 스타일float and real styles

float 또는 real 인 경우 스타일은 다음 표에 있는 값 중 하나일 수 있습니다.For a float or real expression, style can have one of the values shown in the following table. 다른 값은 0으로 처리됩니다.Other values are processed as 0.

Value 출력Output
0 (기본값)0 (default) 최대 6자리 수입니다.A maximum of 6 digits. 해당되는 경우 과학 표기법을 사용하세요.Use in scientific notation, when appropriate.
11 항상 8자리 수입니다.Always 8 digits. 항상 과학 표기법을 사용하세요.Always use in scientific notation.
22 항상 16자리 수입니다.Always 16 digits. 항상 과학 표기법을 사용하세요.Always use in scientific notation.
33 항상 17자리 수입니다.Always 17 digits. 무손실 변환용입니다.Use for lossless conversion. 이 스타일에서는 모든 고유 부동 또는 실수 값이 고유 문자열로 변환됩니다.With this style, every distinct float or real value is guaranteed to convert to a distinct character string.

적용 대상: Azure SQL 데이터베이스Azure SQL DatabaseSQL Server 2016(13.x)SQL Server 2016 (13.x) 이후.Applies to: Azure SQL 데이터베이스Azure SQL Database, and starting in SQL Server 2016(13.x)SQL Server 2016 (13.x).
126, 128, 129126, 128, 129 이전 버전과의 호환성을 위해 제공되며 이후 릴리스에서는 이 값을 더 이상 사용하지 않을 수 있습니다.Included for legacy reasons; a future release could deprecate these values.

money 및 smallmoney 스타일money and smallmoney styles

money 또는 smallmoney 의 경우 스타일은 다음 표에 있는 값 중 하나일 수 있습니다.For a money or smallmoney expression, style can have one of the values shown in the following table. 다른 값은 0으로 처리됩니다.Other values are processed as 0.

Value 출력Output
0 (기본값)0 (default) 소수점 앞 세 자리마다 쉼표를 사용하지 않으며 소수점 이하 두 자리인 수입니다.No commas every three digits to the left of the decimal point, and two digits to the right of the decimal point

예: 4235.98Example: 4235.98.
11 소수점 앞 세 자리마다 쉼표를 사용하며 소수점 이하 두 자리인 수입니다.Commas every three digits to the left of the decimal point, and two digits to the right of the decimal point

예: 3,510.92Example: 3,510.92.
22 소수점 앞 세 자리마다 쉼표를 사용하지 않으며 소수점 이하 4자리인 수입니다.No commas every three digits to the left of the decimal point, and four digits to the right of the decimal point

예: 4235.9819Example: 4235.9819.
126126 char(n) 또는 varchar(n)으로 변환하는 경우 스타일 2와 같습니다.Equivalent to style 2, when converting to char(n) or varchar(n)

xml 스타일xml styles

xml 인 경우 스타일은 다음 표에 있는 값 중 하나일 수 있습니다.For an xml expression, style can have one of the values shown in the following table. 다른 값은 0으로 처리됩니다.Other values are processed as 0.

Value 출력Output
0 (기본값)0 (default) 불필요한 공백을 삭제하고 내부 DTD 하위 집합을 허용하지 않는 기본 구문 분석 동작을 사용합니다.Use default parsing behavior that discards insignificant white space, and does not allow for an internal DTD subset.

참고: xml 데이터 형식으로 변환할 때 SQL ServerSQL Server에서 불필요한 공백은 XML 1.0에서와 다르게 처리됩니다.Note: When converting to the xml data type, SQL ServerSQL Server insignificant white space is handled differently than in XML 1.0. 자세한 내용은 XML 데이터 인스턴스 만들기를 참조하세요.For more information, see Create Instances of XML Data.
11 불필요한 공백을 유지합니다.Preserve insignificant white space. 이 스타일 설정은 기본 xml: space 처리를 xml: space = "preserve" 동작에 맞게 설정합니다.This style setting sets the default xml:space handling to match the behavior of xml:space="preserve".
22 제한된 내부 DTD 하위 집합 처리를 설정합니다.Enable limited internal DTD subset processing.

설정된 경우 서버가 내부 DTD 하위 집합에 제공된 다음 정보를 사용하여 유효성을 검사하지 않는 구문 분석 작업을 수행합니다.If enabled, the server can use the following information that is provided in an internal DTD subset, to perform nonvalidating parse operations.

- 특성의 기본값이 적용됩니다.- Defaults for attributes are applied
- 내부 엔터티 참조가 확인 및 확장됩니다.- Internal entity references are resolved and expanded
- DTD 콘텐츠 모델의 구문이 올바른지 확인합니다.- The DTD content model is checked for syntactical correctness

구문 분석기가 외부 DTD 하위 집합을 무시합니다.The parser ignores external DTD subsets. 또한 standalone 특성의 값이 yes 또는 no인지 확인하기 위해 XML 선언을 평가하지 않습니다.Also, it does not evaluate the XML declaration to see whether the standalone attribute has a yes or no value. 대신, 독자적인 문서로 XML 인스턴스를 구문 분석합니다.Instead, it parses the XML instance as a stand-alone document.
33 불필요한 공백을 유지하고 제한된 내부 DTD 하위 집합 처리를 설정합니다.Preserve insignificant white space, and enable limited internal DTD subset processing.

이진 스타일Binary styles

binary(n), char(n), varbinary(n) 또는 varchar(n) expression 식인 경우 스타일은 다음 표에 있는 값 중 하나일 수 있습니다.For a binary(n), char(n), varbinary(n), or varchar(n) expression, style can have one of the values shown in the following table. 여기에 없는 스타일 값은 오류를 반환합니다.Style values not listed in the table will return an error.

Value 출력Output
0 (기본값)0 (default) ASCII 문자를 이진 바이트로 또는 이진 바이트를 ASCII 문자로 변환합니다.Translates ASCII characters to binary bytes, or binary bytes to ASCII characters. 각 문자 또는 바이트는 1:1로 변환됩니다.Each character or byte is converted 1:1.

이진 data_type인 경우 결과의 왼쪽에 문자 0x가 추가됩니다.For a binary data_type, the characters 0x are added to the left of the result.
1, 21, 2 이진 data_type인 경우 식이 문자 식이어야 합니다.For a binary data_type, the expression must be a character expression. expression짝수 개의 16진수(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f)여야 합니다.The expression must have an even number of hexadecimal digits (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여야 합니다.If the style is set to 1, the must have 0x as the first two characters. 식에 홀수 개의 문자나 유효하지 않은 문자가 포함되어 있으면 오류가 발생합니다.If the expression contains an odd number of characters, or if any of the characters is invalid, an error is raised.

변환된 식의 길이가 data_type의 길이보다 길면 결과의 오른쪽이 잘립니다.If the length of the converted expression exceeds the length of the data_type, the result is right truncated.

고정 길이 data_types가 변환된 결과보다 길면 결과의 오른쪽에 0이 추가됩니다.Fixed length data_types larger than the converted result have zeros added to the right of the result.

형식 문자 data_type에서는 이진 식을 사용해야 합니다.A data_type of type character requires a binary expression. 각 이진 문자는 두 개의 16진수 문자로 변환됩니다.Each binary character is converted into two hexadecimal characters. 변환된 식의 길이가 data_type의 길이보다 길면 오른쪽이 잘립니다.If the length of the converted expression exceeds the length of the data_type, it will be right truncated.

고정 크기 문자 유형 data_type이고 변환된 결과의 길이가 data_type의 길이보다 짧으면 짝수 개의 16진수가 유지되도록 변환된 식의 오른쪽에 공백이 추가됩니다.For a fixed size character type data_type, if the length of the converted result is less than its length of the data_type, spaces are added to the right of the converted expression, to maintain an even number of hexadecimal digits.

style 1의 경우 변환된 결과의 왼쪽에 문자 0x가 추가됩니다.The characters 0x will be added to the left of the converted result for style 1.

암시적 변환Implicit conversions

암시적 변환에서는 CAST 함수나 CONVERT 함수 지정이 필요하지 않습니다.Implicit conversions do not require specification of either the CAST function or the CONVERT function. 명시적 변환에서는 CAST 함수나 CONVERT 함수를 지정해야 합니다.Explicit conversions require specification of the CAST function or the CONVERT function. 다음 그림에서는 SQL ServerSQL Server 시스템 제공 데이터 형식에 허용된 모든 명시적 및 암시적 데이터 형식 변환을 보여 줍니다.The following illustration shows all explicit and implicit data type conversions allowed for SQL ServerSQL Server system-supplied data types. 여기에는 bigint, sql_variantxml이 포함됩니다.These include bigint, and sql_variant, and xml. 할당 시 sql_variant 데이터 형식에서 암시적으로 변환되지는 않지만 sql_variant로는 암시적으로 변환됩니다.There is no implicit conversion on assignment from the sql_variant data type, but there is implicit conversion to sql_variant.

이 차트는 Microsoft 다운로드 센터에서 PDF 파일로 다운로드할 수 있습니다.The Microsoft Download Center has this chart available for download as a PDF file.

데이터 형식 변환표Data type conversion table

datetimeoffsetchar, nchar, nvarcharvarchar 문자 형식 간에 변환할 경우 변환된 표준 시간대 오프셋 부분의 HH 및 MM 부분은 항상 두 자리여야 합니다.When you convert between datetimeoffset and the character types char, nchar, nvarchar, and varchar, the converted time zone offset part should always have double digits for both HH and MM. 예를 들어 -08:00입니다.For example, -08:00.

참고

유니코드 데이터는 항상 짝수 바이트를 사용하므로 binary 또는 varbinary와 유니코드 지원 데이터 형식을 서로 변환할 때는 주의해야 합니다.Because Unicode data always uses an even number of bytes, use caution when you convert binary or varbinary to or from Unicode supported data types. 예를 들어 다음과 같은 변환은 16진수 값 41이 아니라For example, the following conversion does not return a hexadecimal value of 41. 4100의 16 진수 값을 반환합니다(SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)). It returns a hexadecimal value of 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).

큰 값 데이터 형식Large-value data types

큰 값 데이터 형식은 작은 데이터 형식, 특히 nvarchar, varbinaryvarchar 데이터 형식과 같은 암시적 및 명시적 변환 동작을 보입니다.Large-value data types have the same implicit and explicit conversion behavior as their smaller counterparts - specifically, the nvarchar, varbinary, and varchar data types. 그러나 다음 지침을 고려합니다.However, consider the following guidelines:

  • imagevarbinary(max) 간 변환은 암시적 변환이며 textvarchar(max) 간, ntextnvarchar(max) 간 변환도 암시적 변환입니다.Conversion from image to varbinary(max), and vice-versa, operates as an implicit conversion, as do conversions between text and varchar(max), and ntext and nvarchar(max).
  • varchar(max) 등 큰 값 데이터 형식을 varchar 등의 작은 데이터 형식으로 변환하는 것은 암시적 변환이지만 작은 데이터 형식에 지정된 길이에 비해 큰 값이 너무 크면 값이 잘립니다.Conversion from large-value data types, such as varchar(max), to a smaller counterpart data type, such as varchar, is an implicit conversion, but truncation occurs if the size of the large value exceeds the specified length of the smaller data type.
  • nvarchar, varbinary 또는r varchar를 해당하는 큰 값 데이터 형식으로 변환하는 것은 암시적으로 수행됩니다.Conversion from nvarchar, varbinary, or varchar to their corresponding large-value data types happens implicitly.
  • sql_variant 데이터 형식을 큰 값 데이터 형식으로 변환하는 것은 명시적 변환입니다.Conversion from the sql_variant data type to the large-value data types is an explicit conversion.
  • 큰 값 데이터 형식은 sql_variant 데이터 형식으로 변환할 수 없습니다.Large-value data types cannot be converted to the sql_variant data type.

xml 데이터 형식을 변환에 대한 자세한 내용은 XML 데이터 인스턴스 만들기를 참조하세요.For more information about conversion from the xml data type, see Create Instances of XML Data.

XML 데이터 형식입니다.xml data type

xml 데이터 형식을 명시적 또는 암시적으로 문자열 또는 바이너리 데이터 형식으로 변환할 때는 xml 데이터 형식의 내용이 정의된 일련의 규칙에 따라 직렬화됩니다.When you explicitly or implicitly cast the xml data type to a string or binary data type, the content of the xml data type is serialized based on a defined set of rules. 이러한 규칙에 대한 자세한 내용은 XML 데이터 직렬화 정의를 참조하세요.For information about these rules, see Define the Serialization of XML Data. 다른 데이터 형식에서 xml 데이터 형식으로의 변환에 대한 자세한 내용은 XML 데이터 인스턴스 만들기를 참조하세요.For information about conversion from other data types to the xml data type, see Create Instances of XML Data.

text 및 image 데이터 형식text and image data types

textimage 데이터 형식은 자동 데이터 형식 변환을 지원하지 않습니다.The text and image data types do not support automatic data type conversion. 명시적으로 text 데이터를 문자 데이터로 변환하거나 image 데이터를 binary 또는 varbinary로 변환할 수 있지만 최대 길이는 8,000바이트입니다.You can explicitly convert text data to character data, and image data to binary or varbinary, but the maximum length is 8000 bytes. 문자가 포함된 문자 식을 int로 변환하는 등 잘못된 변환을 시도하면 SQL ServerSQL Server에서 오류 메시지를 반환합니다.If you try an incorrect conversion, for example trying to convert a character expression that includes letters to an int, SQL ServerSQL Server returns an error message.

출력 데이터 정렬Output Collation

CAST 또는 CONVERT 함수가 문자열을 출력하고 문자열 입력을 받으면 출력과 입력은 동일한 데이터 정렬 및 데이터 정렬 레이블을 가집니다.When the CAST or CONVERT functions output a character string, and they receive a character string input, the output has the same collation and collation label as the input. 입력이 문자열이 아닌 경우에는 출력에서 데이터베이스의 기본 데이터 정렬을 사용하며 강제할 수 있는 기본값의 데이터 정렬 레이블을 사용합니다.If the input is not a character string, the output has the default collation of the database, and a collation label of coercible-default. 자세한 내용은 데이터 정렬 선행 규칙(Transact-SQL)을 참조하세요.For more information, see Collation Precedence (Transact-SQL).

출력에 다른 데이터 정렬을 할당하려면 CAST 또는 CONVERT 함수의 결과 식에 COLLATE 절을 적용합니다.To assign a different collation to the output, apply the COLLATE clause to the result expression of the CAST or CONVERT function. 예를 들어 다음과 같이 사용할 수 있습니다.For example:

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

결과 잘라내기 및 반올림Truncating and rounding results

문자 또는 이진 식(binary, char, nchar, nvarchar, varbinary 또는 varchar)을 데이터 형식이 다른 식으로 변환할 때는 변환 작업에서 출력 데이터를 잘라 출력 데이터의 일부만 표시하거나 오류를 반환할 수 있습니다.When converting character or binary expressions (binary, char, nchar, nvarchar, varbinary, or varchar) to an expression of a different data type, the conversion operation could truncate the output data, only partially display the output data, or return an error. 이러한 상황은 결과가 너무 작아 표시할 수 없을 때 발생합니다.These cases will occur if the result is too short to display. binary, char, nchar, nvarchar, varbinary 또는varchar로 변환하면 다음 표에 있는 변환을 제외하고 결과가 잘립니다.Conversions to binary, char, nchar, nvarchar, varbinary, or varchar are truncated, except for the conversions shown in the following table.

원래 데이터 형식From data type 변경할 데이터 형식To data type 결과Result
int, smallint 또는 tinyintint, smallint, or tinyint charchar *
varcharvarchar *
ncharnchar EE
nvarcharnvarchar EE
money, smallmoney, numeric, decimal, float 또는 realmoney, smallmoney, numeric, decimal, float, or real charchar EE
varcharvarchar EE
ncharnchar EE
nvarcharnvarchar EE

* = 결과 길이가 너무 짧아 표시되지 않습니다.* = Result length too short to display

E = 결과 길이가 너무 짧아 표시되지 않으므로 오류가 반환됩니다.E = Error returned because result length is too short to display.

SQL ServerSQL Server에서는 원래 데이터 형식을 변환한 후 다시 원래 데이터 형식으로 변환하는 왕복 변환만 버전 간에 같은 값을 생성합니다. guarantees that only roundtrip conversions, in other words conversions that convert a data type from its original data type and back again, yield the same values from version to version. 다음 예에서는 이러한 왕복 변환을 보여 줍니다.The following example shows such a roundtrip conversion:

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 값을 생성한 다음, 숫자 데이터 형식 범주에 속하는 데이터 형식으로 변환하지 마세요.Do not construct binary values, and then convert them to a data type of the numeric data type category. SQL ServerSQL Server에서는 decimal 또는 numeric 데이터 형식을 binary로 변환하면 SQL ServerSQL Server 버전 간에 결과가 다를 수도 있습니다. does not guarantee that the result of a decimal or numeric data type conversion, to binary, will be the same between versions of SQL ServerSQL Server.

다음 예에서는 길이가 짧아 표시할 수 없는 결과 식을 보여 줍니다.The following example shows a resulting expression that is too small to display.

USE AdventureWorks2012;  
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;  

결과 집합은 다음과 같습니다.Here is the result set.

FirstName   LastName      Title   Sick Leave
---------   ------------- ------- --------`
Ken         Sanchez       NULL   *
Terri       Duffy         NULL   *
Roberto     Tamburello    NULL   *
Rob         Walters       NULL   *
Gail        Erickson      Ms.    *
(5 row(s) affected)  

소수 자릿수가 다른 데이터 형식을 변환할 경우 SQL Server는 결과 값을 자르거나 반올림할 수 있습니다.When you convert data types that differ in decimal places, SQL Server will sometimes return a truncated result value, and at other times it will return a rounded value. 이 표에서는 이러한 동작을 보여 줍니다.This table shows the behavior.

보낸 사람From 수행할 작업To 동작Behavior
numericnumeric numericnumeric 반올림Round
numericnumeric intint 잘라내기Truncate
numericnumeric moneymoney 반올림Round
moneymoney intint 반올림Round
moneymoney numericnumeric 반올림Round
floatfloat intint 잘라내기Truncate
floatfloat numericnumeric 반올림Round

과학적 표기법을 사용하는 float 값을 decimal 또는 numerci로 변환할 경우 전체 자릿수 값이 17자리로 제한됩니다.Conversion of float values that use scientific notation to decimal or numeric is restricted to values of precision 17 digits only. 17자리를 넘는 값은 0으로 반올림됩니다.Any value with precision higher than 17 rounds to zero.
floatfloat datetimedatetime 반올림Round
datetimedatetime intint 반올림Round

예를 들어 10.6496 및 -10.6496을 int 또는 numeric 형식으로 변환할 경우 잘리거나 반올림될 수 있습니다.For example, the values 10.6496 and -10.6496 may be truncated or rounded during conversion to int or numeric types:

SELECT  CAST(10.6496 AS int) as trunc1,
         CAST(-10.6496 AS int) as trunc2,
         CAST(10.6496 AS numeric) as round1,
         CAST(-10.6496 AS numeric) as round2;

쿼리 결과가 다음 표에 나와 있습니다.Results of the query are shown in the following table:

trunc1trunc1 trunc2trunc2 round1round1 round2round2
1010 -10-10 1111 -11-11

대상 데이터 형식의 소수 자릿수가 원본 데이터 형식의 소수 자릿수보다 적은 데이터 형식을 변환할 경우 값이 반올림됩니다.When converting data types where the target data type has fewer decimal places than the source data type, the value is rounded. 예를 들어 이 변환은 $10.3497을 반환합니다.For example, this conversion returns $10.3497:

SELECT CAST(10.3496847 AS money);

SQL ServerSQL Server에서 숫자가 아닌 char, nchar, nvarchar 또는 varchar 데이터를 decimal, float, int, numeric으로 변환할 경우 오류 메시지가 반환됩니다. returns an error message when converting nonnumeric char, nchar, nvarchar, or varchar data to decimal, float, int, numeric. SQL ServerSQL Server에서는 빈 문자열(" ")을 numeric 또는 decimal로 변환해도 오류가 반환됩니다. also returns an error when an empty string (" ") is converted to numeric or decimal.

일부 datetime 변환은 비결정적임Certain datetime conversions are nondeterministic

다음 표에서는 문자열에서 datetime으로의 변환이 비결정적인 스타일을 나열합니다.The following table lists the styles for which the string-to-datetime conversion is nondeterministic.

1001 아래의 모든 스타일All styles below 1001 106106
107107 109109
113113 130130

1 스타일 20 및 21 제외1 With the exception of styles 20 and 21

보조 문자(서로게이트 쌍)Supplementary characters (surrogate pairs)

SQL Server 2012(11.x)SQL Server 2012 (11.x)부터는 SC(보조 문자) 데이터 정렬을 사용할 경우 nchar 또는 nvarchar 형식에서 길이가 작은 nchar 또는 nvarchar 형식으로 CAST 연산을 수행하면 서로게이트 쌍 안에서 자르지 않습니다.Starting with SQL Server 2012(11.x)SQL Server 2012 (11.x), when using supplementary character (SC) collations, a CAST operation from nchar or nvarchar to an nchar or nvarchar type of smaller length will not truncate inside a surrogate pair. 대신 이 연산은 보조 문자 앞에서 자릅니다.Instead, the operation truncates before the supplementary character. 예를 들어 다음 코드 조각에서는 @x만 보유한 'ab'를 남깁니다.For example, the following code fragment leaves @x holding just 'ab'. 공간이 부족하여 보조 문자를 포함할 수 없습니다.There is not enough space to hold the supplementary character.

DECLARE @x NVARCHAR(10) = 'ab' + NCHAR(0x10000);  
SELECT CAST (@x AS NVARCHAR(3));  

SC 데이터 정렬을 사용할 경우 CONVERT의 동작은 CAST의 동작과 유사합니다.When using SC collations, the behavior of CONVERT, is analogous to that of CAST.

호환성 지원Compatibility support

이전 버전의 SQL ServerSQL Server에서는 time 또는 datetime2 데이터 형식이 계산 열 식에 사용된 경우를 제외하고 해당 형식에 대한 CAST 및 CONVERT 연산의 기본 스타일은 121입니다.In earlier versions of SQL ServerSQL Server, the default style for CAST and CONVERT operations on time and datetime2 data types is 121, except when either type is used in a computed column expression. 계산 열의 경우 기본 스타일은 0입니다.For computed columns, the default style is 0. 이 동작은 자동 매개 변수화와 관련된 쿼리에서 이러한 연산이 만들어지고 사용될 때 또는 제약 조건 정의에 사용될 때 계산 열에 영향을 줍니다.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

호환성 수준 110 이상에서 timedatetime2 데이터 형식에 대한 CAST 및 CONVERT 연산의 기본 스타일은 항상 121입니다.Under compatibility level 110 and higher, the CAST and CONVERT operations on the time and datetime2 datatypes always have 121 as the default style. 쿼리에 이전 동작이 적용되는 경우 110보다 낮은 호환성 수준을 사용하거나, 해당 쿼리에서 스타일 0을 명시적으로 지정해야 합니다.If a query relies on the old behavior, use a compatibility level less than 110, or explicitly specify the 0 style in the affected query.

데이터베이스를 호환성 수준 110 이상으로 업그레이드할 경우 디스크에 저장된 사용자 데이터는 변경되지 않습니다.Upgrading the database to compatibility level 110 and higher will not change user data that has been stored to disk. 수동으로 이 데이터를 적절하게 수정해야 합니다.You must manually correct this data as appropriate. 예를 들어 SELECT INTO를 사용하여 위에서 설명한 계산 열 식이 포함된 원본에서 테이블을 만든 경우 계산 열 정의 자체가 아니라 스타일 0을 사용하는 데이터가 저장됩니다.For example, if you used SELECT INTO to create a table from a source containing a computed column expression described above, the data (using style 0) would be stored rather than the computed column definition itself. 스타일 121과 일치하도록 이 데이터를 수동으로 업데이트해야 합니다.You must manually update this data to match style 121.

Examples

1.A. CAST 및 CONVERT 모두 사용Using both CAST and CONVERT

각 예에서는 제품 가격 첫 자리에 3이 있는 제품의 이름을 검색하고 ListPrice 값을 int로 변환합니다.These examples retrieve the name of the product, for those products that have a 3 as the first digit of list price, and converts their ListPrice values to int.

-- Use CAST  
USE AdventureWorks2012;  
GO  
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice  
FROM Production.Product  
WHERE CAST(ListPrice AS int) LIKE '3%';  
GO  

-- Use CONVERT.  
USE AdventureWorks2012;  
GO  
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice  
FROM Production.Product  
WHERE CONVERT(int, ListPrice) LIKE '3%';  
GO  

2.B. CAST에 산술 연산자 사용Using CAST with arithmetic operators

이 예에서는 총 연간 매출(Computed)을 커미션 비율(SalesYTD)로 나누어 한 열을 계산(CommissionPCT)합니다.This example calculates a single column computation (Computed) by dividing the total year-to-date sales (SalesYTD) by the commission percentage (CommissionPCT). 이 값은 가장 근사한 정수로 반올림된 다음, int 데이터 형식으로 CAST 연산이 수행됩니다.This value is rounded to the nearest whole number and is then CAST to an int data type.

USE AdventureWorks2012;  
GO  
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS Computed  
FROM Sales.SalesPerson   
WHERE CommissionPCT != 0;  
GO  

결과 집합은 다음과 같습니다.Here is the result set.

Computed
------
379753754
346698349
257144242
176493899
281101272
0  
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107
(14 row(s) affected)  

3.C. CAST를 사용하여 연결Using CAST to concatenate

이 예에서는 CAST를 사용하여 문자가 아닌 식을 연결합니다.This example concatenates noncharacter expressions by using CAST. AdventureWorksDW 데이터베이스를 사용합니다.It uses the AdventureWorksDW database.

SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice  
FROM dbo.DimProduct  
WHERE ListPrice BETWEEN 350.00 AND 400.00;  

결과 집합은 다음과 같습니다.Here is the result set.

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  

4.D. CAST를 사용하여 읽기 쉬운 텍스트 만들기Using CAST to produce more readable text

이 예에서는 SELECT 목록에 CAST를 사용하여 Name 열을 char(10) 열로 변환합니다.This example uses CAST in the SELECT list, to convert the Name column to a char(10) column. AdventureWorksDW 데이터베이스를 사용합니다.It uses the AdventureWorksDW database.

SELECT DISTINCT CAST(EnglishProductName AS char(10)) AS Name, ListPrice  
FROM dbo.DimProduct  
WHERE EnglishProductName LIKE 'Long-Sleeve Logo Jersey, M';  

결과 집합은 다음과 같습니다.Here is the result set.

Name        ListPrice
----------  ---------
Long-Sleev  31.2437
Long-Sleev  32.4935
Long-Sleev  49.99  

5.E. CAST에 LIKE 절 사용Using CAST with the LIKE clause

이 예에서는 moneySalesYTD 값을 int 데이터 형식으로 변환한 다음, char(20) 데이터 형식으로 변환하여 LIKE 절이 사용할 수 있게 합니다.This example converts the money column SalesYTD values to data type int, and then to data typechar(20), so that the LIKE clause can use it.

USE AdventureWorks2012;  
GO  
SELECT p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID  
FROM Person.Person AS p   
JOIN Sales.SalesPerson AS s   
    ON p.BusinessEntityID = s.BusinessEntityID  
WHERE CAST(CAST(s.SalesYTD AS int) AS char(20)) LIKE '2%';  
GO  

결과 집합은 다음과 같습니다.Here is the result set.

FirstName        LastName            SalesYTD         BusinessEntityID
---------------- ------------------- ---------------- -------------
Tsvi             Reiter              2811012.7151      279
Syed             Abbas               219088.8836       288
Rachel           Valdez              2241204.0424      289
(3 row(s) affected)  

6.F. 형식화된 XML과 함께 CONVERT 또는 CAST 사용Using CONVERT or CAST with typed XML

이 예제에서는 CONVERT와 XML 데이터 형식 및 열(SQL Server)을 사용하여 데이터를 형식화된 XML로 변환하는 것을 보여 줍니다.These examples show use of CONVERT to convert data to typed XML, by using the XML Data Type and Columns (SQL Server).

다음 예에서는 공백, 텍스트 및 태그가 있는 문자열을 형식화된 XML로 변환하고 불필요한 공백(노드 사이의 경계 공백)을 모두 제거합니다.This example converts a string with white space, text and markup into typed XML, and removes all insignificant white space (boundary white space between nodes):

SELECT CONVERT(XML, '<root><child/></root>')  

다음 예에서는 공백, 텍스트 및 태그가 있는 비슷한 문자열을 형식화된 XML로 변환하고 불필요한 공백(노드 사이의 경계 공백)을 유지합니다.This example converts a similar string with white space, text and markup into typed XML and preserves insignificant white space (boundary white space between nodes):

SELECT CONVERT(XML, '<root>          <child/>         </root>', 1)  

다음 예에서는 공백, 텍스트 및 태그가 있는 문자열을 형식화된 XML로 캐스팅합니다.This example casts a string with white space, text, and markup into typed XML:

SELECT CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>'  AS XML)  

다른 예는 XML 데이터 인스턴스 만들기를 참조하세요.See Create Instances of XML Data for more examples.

7.G. datetime 데이터와 함께 CAST 및 CONVERT 사용Using CAST and CONVERT with datetime data

GETDATE() 값으로 시작하는 다음 예에서는 현재 날짜와 시간을 표시합니다. 즉, CAST를 사용하여 현재 날짜와 시간을 문자 데이터 형식으로 변경한 다음, CONVERT를 사용하여 ISO 8901 형식으로 날짜와 시간을 표시합니다.Starting with GETDATE() values, this example displays the current date and time, uses CAST to change the current date and time to a character data type, and then uses CONVERT to display the date and time in the ISO 8901 format.

SELECT   
   GETDATE() AS UnconvertedDateTime,  
   CAST(GETDATE() AS nvarchar(30)) AS UsingCast,  
   CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;  
GO  

결과 집합은 다음과 같습니다.Here is the result set.

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)  

이 예에서는 이전 예와 반대로 수행합니다.This example is approximately the opposite of the previous example. 이 예에서는 날짜와 시간을 문자 데이터로 표시합니다. 즉, CAST를 사용하여 문자 데이터를 datetime 데이터 형식으로 변경한 다음, CONVERT를 사용하여 문자 데이터를 datetime 데이터 형식으로 변경합니다.This example displays a date and time as character data, uses CAST to change the character data to the datetime data type, and then uses CONVERT to change the character data to the datetime data type.

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  

결과 집합은 다음과 같습니다.Here is the result set.

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.H. CONVERT에 이진 및 문자 데이터 사용Using CONVERT with binary and character data

이 예에서는 다양한 스타일을 사용하여 이진 및 문자 데이터를 변환한 결과를 보여 줍니다.These examples show the results of binary and character data conversion, using different styles.

--Convert the binary value 0x4E616d65 to a character value.  
SELECT CONVERT(char(8), 0x4E616d65, 0) AS [Style 0, binary to character];  

결과 집합은 다음과 같습니다.Here is the result set.

Style 0, binary to character
----------------------------
Name  
(1 row(s) affected)  

이 예에서는 스타일 1에서 결과 잘림이 발생할 수 있음을 보여 줍니다.This example shows that Style 1 can force result truncation. 결과 집합의 0x 문자로 인해 잘림이 발생합니다.The characters 0x in the result set force the truncation.

SELECT CONVERT(char(8), 0x4E616d65, 1) AS [Style 1, binary to character];  

결과 집합은 다음과 같습니다.Here is the result set.

Style 1, binary to character
------------------------------
0x4E616D
(1 row(s) affected)  

이 예는 결과에 0x 문자가 포함되지 않았기 때문에 Style 2에서 결과가 잘리지 않았음을 보여 줍니다.This example shows that Style 2 does not truncate the result, because the result does not include the characters 0x.

SELECT CONVERT(char(8), 0x4E616d65, 2) AS [Style 2, binary to character];  

결과 집합은 다음과 같습니다.Here is the result set.

Style 2, binary to character
------------------------------
4E616D65
(1 row(s) affected)  

'Name' 문자 값을 이진 값으로 변환합니다.Convert the character value 'Name' to a binary value.

SELECT CONVERT(binary(8), 'Name', 0) AS [Style 0, character to binary];  

결과 집합은 다음과 같습니다.Here is the result set.

Style 0, character to binary
----------------------------
0x4E616D6500000000
(1 row(s) affected)  
SELECT CONVERT(binary(4), '0x4E616D65', 1) AS [Style 1, character to binary];  

결과 집합은 다음과 같습니다.Here is the result set.

Style 1, character to binary
---------------------------- 
0x4E616D65
(1 row(s) affected)  
SELECT CONVERT(binary(4), '4E616D65', 2) AS [Style 2, character to binary];  

결과 집합은 다음과 같습니다.Here is the result set.

Style 2, character to binary  
----------------------------------  
0x4E616D65
(1 row(s) affected)  

9.I. 날짜 및 시간 데이터 형식 변환Converting date and time data types

이 예는 date, time 및 datetime 데이터 형식의 변환을 보여 줍니다.This example shows the conversion of date, time, and datetime data types.

DECLARE @d1 date, @t1 time, @dt1 datetime;  
SET @d1 = GETDATE();  
SET @t1 = GETDATE();  
SET @dt1 = GETDATE();  
SET @d1 = GETDATE();  
-- When converting date to datetime the minutes portion becomes zero.  
SELECT @d1 AS [date], CAST (@d1 AS datetime) AS [date as datetime];  
-- When converting time to datetime the date portion becomes zero   
-- which converts to January 1, 1900.  
SELECT @t1 AS [time], CAST (@t1 AS datetime) AS [time as datetime];  
-- When converting datetime to date or time non-applicable portion is dropped.  
SELECT @dt1 AS [datetime], CAST (@dt1 AS date) AS [datetime as date], 
   CAST (@dt1 AS time) AS [datetime as time];  

예제: Azure SQL 데이터 웨어하우스Azure SQL Data Warehouse병렬 데이터 웨어하우스Parallel Data WarehouseExamples: Azure SQL 데이터 웨어하우스Azure SQL Data Warehouse and 병렬 데이터 웨어하우스Parallel Data Warehouse

10.J. CAST 및 CONVERT 사용Using CAST and CONVERT

이 예에서는 제품 가격 첫 자리에 3이 있는 제품의 이름을 검색하고 이 제품의 ListPriceint로 변환합니다. AdventureWorksDW 데이터베이스를 사용합니다.This example retrieves the name of the product for those products that have a 3 in the first digit of their list price, and converts the ListPrice of these products to int. It uses the AdventureWorksDW database.

SELECT EnglishProductName AS ProductName, ListPrice  
FROM dbo.DimProduct  
WHERE CAST(ListPrice AS int) LIKE '3%';  

이 예는 CAST 대신 CONVERT를 사용하여 동일한 쿼리를 보여줍니다.This example shows the same query, using CONVERT instead of CAST. AdventureWorksDW 데이터베이스를 사용합니다.It uses the AdventureWorksDW database.

SELECT EnglishProductName AS ProductName, ListPrice  
FROM dbo.DimProduct  
WHERE CONVERT(int, ListPrice) LIKE '3%';  

11.K. CAST에 산술 연산자 사용Using CAST with arithmetic operators

이 예에서는 제품 단가(UnitPrice)를 할인율(UnitPriceDiscountPct)로 나누어 한 열 값을 계산합니다.This example calculates a single column value by dividing the product unit price (UnitPrice) by the discount percentage (UnitPriceDiscountPct). 그런 다음, 이 결과를 가장 가까운 정수로 반올림한 후 int 데이터 형식으로 변환합니다.This result is then rounded to the nearest whole number, and finally converted to an int data type. 이 예에서는 AdventureWorksDW 데이터베이스를 사용합니다.This example uses the AdventureWorksDW database.

SELECT ProductKey, UnitPrice,UnitPriceDiscountPct,  
       CAST(ROUND (UnitPrice*UnitPriceDiscountPct,0) AS int) AS DiscountPrice  
FROM dbo.FactResellerSales  
WHERE SalesOrderNumber = 'SO47355'   
      AND UnitPriceDiscountPct > .02;  

결과 집합은 다음과 같습니다.Here is the result set.

ProductKey  UnitPrice  UnitPriceDiscountPct  DiscountPrice
----------  ---------  --------------------  -------------
323         430.6445   0.05                  22
213         18.5043    0.05                  1
456         37.4950    0.10                  4
456         37.4950    0.10                  4
216         18.5043    0.05                  1  

12.L. CAST에 LIKE 절 사용Using CAST with the LIKE clause

이 예에서는 moneyListPriceint 형식으로 변환한 다음, LIKE 절에 사용할 수 있도록 char(20) 형식으로 변환합니다.This example converts the money column ListPrice to an int type, and then to a char(20) type, so that the LIKE clause can use it. 이 예에서는 AdventureWorksDW 데이터베이스를 사용합니다.This example uses the AdventureWorksDW database.

SELECT EnglishProductName AS Name, ListPrice  
FROM dbo.DimProduct  
WHERE CAST(CAST(ListPrice AS int) AS char(20)) LIKE '2%';  

13.M. datetime 데이터와 함께 CAST 및 CONVERT 사용Using CAST and CONVERT with datetime data

이 예에서는 현재 날짜와 시간을 표시하고, CAST를 사용하여 현재 날짜와 시간을 문자 데이터 형식으로 변환한 다음, CONVERT를 사용하여 날짜와 시간을 ISO 8601 형식으로 표시합니다.This example displays the current date and time, uses CAST to change the current date and time to a character data type, and finally uses CONVERT display the date and time in the ISO 8601 format. 이 예에서는 AdventureWorksDW 데이터베이스를 사용합니다.This example uses the AdventureWorksDW database.

SELECT TOP(1)  
   SYSDATETIME() AS UnconvertedDateTime,  
   CAST(SYSDATETIME() AS nvarchar(30)) AS UsingCast,  
   CONVERT(nvarchar(30), SYSDATETIME(), 126) AS UsingConvertTo_ISO8601  
FROM dbo.DimCustomer;  

결과 집합은 다음과 같습니다.Here is the result set.

UnconvertedDateTime     UsingCast                     UsingConvertTo_ISO8601  
---------------------   ---------------------------   ---------------------------  
07/20/2010 1:44:31 PM   2010-07-20 13:44:31.5879025   2010-07-20T13:44:31.5879025  

이 예에서는 이전 예와 거의 반대로 수행됩니다.This example is the rough opposite of the previous example. 이 예에서는 날짜와 시간을 문자 데이터로 표시합니다. 즉, CAST를 사용하여 문자 데이터를 datetime 데이터 형식으로 변경한 다음, CONVERT를 사용하여 문자 데이터를 datetime 데이터 형식으로 변경합니다.This example displays a date and time as character data, uses CAST to change the character data to the datetime data type, and then uses CONVERT to change the character data to the datetime data type. 이 예에서는 AdventureWorksDW 데이터베이스를 사용합니다.This example uses the AdventureWorksDW database.

SELECT TOP(1)   
   '2010-07-25T13:50:38.544' AS UnconvertedText,  
CAST('2010-07-25T13:50:38.544' AS datetime) AS UsingCast,  
   CONVERT(datetime, '2010-07-25T13:50:38.544', 126) AS UsingConvertFrom_ISO8601  
FROM dbo.DimCustomer;  

결과 집합은 다음과 같습니다.Here is the result set.

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2010-07-25T13:50:38.544 07/25/2010 1:50:38 PM   07/25/2010 1:50:38 PM  

관련 항목:See also

데이터 형식 변환(데이터베이스 엔진)Data Type Conversion (Database Engine)
FORMAT(Transact-SQL)FORMAT (Transact-SQL)
STR(Transact-SQL)STR (Transact-SQL)
SELECT(Transact-SQL)SELECT (Transact-SQL)
시스템 함수(Transact-SQL)System Functions (Transact-SQL)
국가별 Transact-SQL 문 작성Write International Transact-SQL Statements