FORMAT(Transact-SQL)FORMAT (Transact-SQL)

적용 대상: 예SQL Server 예Azure SQL Database 아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL Server 2017SQL Server 2017에서 지정된 형식 및 선택적 culture로 서식이 지정된 값을 반환합니다.Returns a value formatted with the specified format and optional culture in SQL Server 2017SQL Server 2017. 날짜/시간 및 숫자 값을 문자열로 지정하는 로캘 인식 서식 지정에 FORMAT 함수를 사용합니다.Use the FORMAT function for locale-aware formatting of date/time and number values as strings. 일반 데이터 형식 변환의 경우 CAST나 CONVERT를 사용합니다.For general data type conversions, use CAST or CONVERT.

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

구문Syntax

FORMAT ( value, format [, culture ] )  

인수Arguments

valuevalue
서식을 지정할 지원되는 데이터 형식의 식입니다.Expression of a supported data type to format. 유효한 형식 목록은 다음 설명 섹션의 표를 참조하세요.For a list of valid types, see the table in the following Remarks section.

formatformat
nvarchar 형식 패턴nvarchar format pattern.

format 인수는 유효한 .NET Framework 형식 문자열을 표준 형식 문자열(예: "C" 또는 "D") 또는 날짜 및 숫자 값에 대한 사용자 지정 문자 패턴(예: "MMMM DD, yyyy (dddd)")으로 포함해야 합니다.The format argument must contain a valid .NET Framework format string, either as a standard format string (for example, "C" or "D"), or as a pattern of custom characters for dates and numeric values (for example, "MMMM DD, yyyy (dddd)"). 복합 서식 지정은 지원되지 않습니다.Composite formatting is not supported. 이러한 형식 지정 패턴에 대한 자세한 설명은 .NET Framework 설명서에서 일반적인 문자열 서식 지정, 사용자 지정 날짜 및 시간 형식 및 사용자 지정 숫자 형식을 참조하세요.For a full explanation of these formatting patterns, consult the .NET Framework documentation on string formatting in general, custom date and time formats, and custom number formats. 시작할 때 유용한 항목은 "형식 지정"입니다.A good starting point is the topic, "Formatting Types."

cultureculture
culture를 지정하는 선택적 nvarchar 인수입니다.Optional nvarchar argument specifying a culture.

culture 인수를 지정하지 않으면 현재 세션의 언어가 사용됩니다.If the culture argument is not provided, the language of the current session is used. 이 언어는 SET LANGUAGE 문을 사용하여 명시적으로 또는 암시적으로 설정됩니다.This language is set either implicitly, or explicitly by using the SET LANGUAGE statement. culture에 지정할 수 있는 culture는 SQL ServerSQL Server에서 명시적으로 지원하는 언어로만 국한되지 않으며 .NET Framework에서 인수로 지원하는 모든 culture를 지정할 수 있습니다.culture accepts any culture supported by the .NET Framework as an argument; it is not limited to the languages explicitly supported by SQL ServerSQL Server. culture 인수가 유효하지 않을 경우 FORMAT은 오류를 발생시킵니다.If the culture argument is not valid, FORMAT raises an error.

반환 형식Return Types

nvarchar 또는 nullnvarchar or null

반환 값의 길이는 format에 의해 결정됩니다.The length of the return value is determined by the format.

RemarksRemarks

FORMAT은 valid가 아닌 culture 이외의 다른 오류에 대해 NULL을 반환합니다.FORMAT returns NULL for errors other than a culture that is not valid. 예를 들어 format에 지정된 값이 유효하지 않으면 NULL이 반환됩니다.For example, NULL is returned if the value specified in format is not valid.

FORMAT 함수는 비결정적입니다.The FORMAT function is nondeterministic.

FORMAT은 .NET Framework CLR(공용 언어 런타임)이 설치되어 있어야 사용할 수 있습니다.FORMAT relies on the presence of the .NET Framework Common Language Runtime (CLR).

이 함수는 CLR이 있어야 실행되므로 원격에서 실행할 수 없습니다.This function cannot be remoted since it depends on the presence of the CLR. CLR이 설치되어 있어야만 실행되는 함수를 원격에서 호출할 경우 원격 서버에서 오류가 발생합니다.Remoting a function that requires the CLR, could cause an error on the remote server.

FORMAT은 콜론과 마침표를 이스케이프해야 하는 CLR 서식 지정 규칙이 있어야 실행됩니다.FORMAT relies upon CLR formatting rules, which dictate that colons and periods must be escaped. 따라서 형식 문자열(두 번째 매개 변수)에 콜론 또는 마침표가 포함된 경우 입력 값(첫 번째 매개 변수)이 time 데이터 형식이면 백슬래시로 콜론 또는 마침표를 이스케이프해야 합니다.Therefore, when the format string (second parameter) contains a colon or period, the colon or period must be escaped with backslash when an input value (first parameter) is of the time data type. 4. 시간 데이터 형식이 포함된 FORMATSee D. FORMAT with time data types.

다음 표에서는 value 인수에 사용할 수 있는 데이터 형식과 함께 .NET Framework 매핑에서 이에 해당하는 데이터 형식을 보여 줍니다.The following table lists the acceptable data types for the value argument together with their .NET Framework mapping equivalent types.

범주Category 형식Type .NET 형식.NET type
숫자Numeric BIGINTbigint Int64Int64
숫자Numeric intint Int32Int32
숫자Numeric SMALLINTsmallint Int16Int16
숫자Numeric TINYINTtinyint ByteByte
숫자Numeric Decimaldecimal SqlDecimalSqlDecimal
숫자Numeric NUMERICnumeric SqlDecimalSqlDecimal
숫자Numeric FLOATfloat DoubleDouble
숫자Numeric REALreal 단일Single
숫자Numeric SMALLMONEYsmallmoney DecimalDecimal
숫자Numeric moneymoney DecimalDecimal
날짜 및 시간Date and Time 날짜date DateTimeDateTime
날짜 및 시간Date and Time Timetime TimeSpanTimeSpan
날짜 및 시간Date and Time DATETIMEdatetime DateTimeDateTime
날짜 및 시간Date and Time smalldatetimesmalldatetime DateTimeDateTime
날짜 및 시간Date and Time Datetime2datetime2 DateTimeDateTime
날짜 및 시간Date and Time datetimeoffsetdatetimeoffset DateTimeOffsetDateTimeOffset

Examples

1.A. 간단한 FORMAT 예Simple FORMAT example

다음 예에서는 다양한 culture에 따라 형식이 지정된 간단한 날짜를 반환합니다.The following example returns a simple date formatted for different cultures.

DECLARE @d DATETIME = '10/01/2011';  
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'  
      ,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'  
      ,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'  
      ,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result';
  
SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'  
      ,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'  
      ,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'  
      ,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';  

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

US English Result Great Britain English Result  German Result Simplified Chinese (PRC) Result  
----------------  ----------------------------- ------------- -------------------------------------  
10/1/2011         01/10/2011                    01.10.2011    2011/10/1  
  
(1 row(s) affected)  
  
US English Result            Great Britain English Result  German Result                    Chinese (Simplified PRC) Result  
---------------------------- ----------------------------- -----------------------------  ---------------------------------------  
Saturday, October 01, 2011   01 October 2011               Samstag, 1. Oktober 2011        2011年10月1日  
  
(1 row(s) affected)  

2.B. 사용자 지정 서식 문자열이 포함된 FORMATFORMAT with custom formatting strings

다음 예에서는 사용자 지정 서식을 지정하여 숫자 값의 서식을 지정하는 방법을 보여 줍니다.The following example shows formatting numeric values by specifying a custom format. 이 예는 현재 날짜가 2012년 9월 27일인 경우를 가정합니다.The example assumes that the current date is September 27, 2012. 이러한 서식과 다른 사용자 지정 서식에 대한 자세한 내용은 사용자 지정 숫자 형식 문자열을 참조하세요.For more information about these and other custom formats, see Custom Numeric Format Strings.

DECLARE @d DATETIME = GETDATE();  
SELECT FORMAT( @d, 'dd/MM/yyyy', 'en-US' ) AS 'DateTime Result'  
       ,FORMAT(123456789,'###-##-####') AS 'Custom Number Result';  

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

DateTime Result  Custom Number Result  
--------------   --------------------  
27/09/2012       123-45-6789  
  
(1 row(s) affected)  

C.C. 숫자 유형이 있는 FORMATFORMAT with numeric types

다음 예에서는 AdventureWorks2012AdventureWorks2012 데이터베이스의 Sales.CurrencyRate 테이블에서 5개의 행을 반환합니다.The following example returns 5 rows from the Sales.CurrencyRate table in the AdventureWorks2012AdventureWorks2012 database. EndOfDateRate 열은 테이블에 money 유형으로 저장됩니다.The column EndOfDateRate is stored as type money in the table. 이 예에서는 서식이 지정되지 않은 상태로 열이 반환된 다음 .NET 숫자 형식, 일반 형식 및 통화 형식 유형 중 하나로 서식이 지정됩니다.In this example, the column is returned unformatted and then formatted by specifying the .NET Number format, General format, and Currency format types. 이러한 형식과 다른 숫자 형식에 대한 자세한 내용은 표준 숫자 형식 문자열을 참조하세요.For more information about these and other numeric formats, see Standard Numeric Format Strings.

SELECT TOP(5)CurrencyRateID, EndOfDayRate  
            ,FORMAT(EndOfDayRate, 'N', 'en-us') AS 'Number Format'  
            ,FORMAT(EndOfDayRate, 'G', 'en-us') AS 'General Format'  
            ,FORMAT(EndOfDayRate, 'C', 'en-us') AS 'Currency Format'  
FROM Sales.CurrencyRate  
ORDER BY CurrencyRateID;  

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

CurrencyRateID EndOfDayRate  Numeric Format  General Format  Currency Format  
-------------- ------------  --------------  --------------  ---------------  
1              1.0002        1.00            1.0002          $1.00  
2              1.55          1.55            1.5500          $1.55  
3              1.9419        1.94            1.9419          $1.94  
4              1.4683        1.47            1.4683          $1.47  
5              8.2784        8.28            8.2784          $8.28  
  
(5 row(s) affected)  
  

이 예에서는 독일어 culture(de-de)를 지정합니다.This example specifies the German culture (de-de).

SELECT TOP(5)CurrencyRateID, EndOfDayRate  
      ,FORMAT(EndOfDayRate, 'N', 'de-de') AS 'Numeric Format'  
      ,FORMAT(EndOfDayRate, 'G', 'de-de') AS 'General Format'  
      ,FORMAT(EndOfDayRate, 'C', 'de-de') AS 'Currency Format'  
FROM Sales.CurrencyRate  
ORDER BY CurrencyRateID;  
CurrencyRateID EndOfDayRate  Numeric Format  General Format  Currency Format  
-------------- ------------  --------------  --------------  ---------------  
1              1.0002        1,00            1,0002          1,00 €  
2              1.55          1,55            1,5500          1,55 €  
3              1.9419        1,94            1,9419          1,94 €  
4              1.4683        1,47            1,4683          1,47 €  
5              8.2784        8,28            8,2784          8,28 €  
  
 (5 row(s) affected)  

4.D. 시간 데이터 형식이 포함된 FORMATFORMAT with time data types

이러한 경우 .:가 이스케이프되지 않으므로 FORMAT에서 NULL을 반환합니다.FORMAT returns NULL in these cases because . and : are not escaped.

SELECT FORMAT(cast('07:35' as time), N'hh.mm');   --> returns NULL  
SELECT FORMAT(cast('07:35' as time), N'hh:mm');   --> returns NULL  

.:가 이스케이프되지 않으므로 Format에서 서식이 지정된 문자열을 반환합니다.Format returns a formatted string because the . and : are escaped.

SELECT FORMAT(cast('07:35' as time), N'hh\.mm');  --> returns 07.35  
SELECT FORMAT(cast('07:35' as time), N'hh\:mm');  --> returns 07:35  

형식은 지정된 AM 또는 PM으로 서식이 지정된 현재 시간을 반환합니다.Format returns a formatted current time with AM or PM specified

SELECT FORMAT(SYSDATETIME(), N'hh:mm tt'); -- returns 03:46 PM
SELECT FORMAT(SYSDATETIME(), N'hh:mm t'); -- returns 03:46 P

형식은 지정된 시간을 반환하고 AM을 표시합니다.Format returns the specified time, displaying AM

select FORMAT(CAST('2018-01-01 01:00' AS datetime2), N'hh:mm tt') -- returns 01:00 AM
select FORMAT(CAST('2018-01-01 01:00' AS datetime2), N'hh:mm t')  -- returns 01:00 A

형식은 지정된 시간을 반환하고 PM을 표시합니다.Format returns the specified time, displaying PM

select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'hh:mm tt') -- returns 02:00 PM
select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'hh:mm t') -- returns 02:00 P

형식은 지정된 시간을 24시간 형식으로 반환합니다.Format returns the specified time in 24h format

select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'HH:mm') -- returns 14:00

참고 항목See Also

CAST 및 CONVERT(Transact-SQL)CAST and CONVERT (Transact-SQL)
STR(Transact-SQL)STR (Transact-SQL)
문자열 함수(Transact-SQL)String Functions (Transact-SQL)