FORMAT(Transact-SQL)
적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric의 SQL 분석 엔드포인트Microsoft Fabric의 웨어하우스
지정된 형식 및 선택적 culture로 서식이 지정된 값을 반환합니다.
FORMAT
날짜/시간 및 숫자 값의 로캘 인식 형식 지정에 문자열로 함수를 사용합니다. 일반 데이터 형식 변환의 경우 사용 CAST
하거나 CONVERT
.
구문
FORMAT( value , format [ , culture ] )
인수
value
서식을 지정할 지원되는 데이터 형식의 식입니다. 유효한 형식 목록은 주의 섹션의 표를 참조하세요 .
format
nvarchar 형식 패턴
형식 인수는 "MMMM DD, yyyy (dddd)"
합니다. 복합 서식은 지원되지 않습니다.
이러한 형식 지정 패턴에 대한 자세한 설명은 .NET Framework 설명서에서 일반적인 문자열 서식 지정, 사용자 지정 날짜 및 시간 형식 및 사용자 지정 숫자 형식을 참조하세요. 자세한 내용은 서식 지정 형식을 참조하세요.
문화권
culture를 지정하는 선택적 nvarchar 인수입니다.
문화권 인수가 제공되지 않으면 현재 세션의 언어가 사용됩니다. 이 언어는 암시적으로 설정되거나 문을 사용하여 명시적으로 설정됩니다 SET LANGUAGE
.
culture 는 .NET Framework에서 지원하는 모든 문화권을 인수로 허용하며 SQL Server에서 명시적으로 지원하는 언어로 제한되지 않습니다. 문화권 인수가 유효 FORMAT
하지 않으면 오류가 발생합니다.
반환 형식
nvarchar 또는 null
반환 값의 길이는 format에 의해 결정됩니다.
설명
FORMAT
는 유효하지 않은 문화권 NULL
이외의 오류에 대해 반환 합니다. 예를 들어 NULL
형식으로 지정된 값이 유효하지 않으면 반환됩니다.
함수가 FORMAT
비결정적입니다.
FORMAT
는 .NET Framework CLR(공용 언어 런타임)의 존재 여부에 의존합니다.
이 함수는 CLR의 존재 여부에 따라 달라지므로 원격으로 사용할 수 없습니다. CLR이 설치되어 있어야만 실행되는 함수를 원격에서 호출할 경우 원격 서버에서 오류가 발생합니다.
FORMAT
는 콜론과 마침표가 이스케이프되어야 함을 지시하는 CLR 서식 지정 규칙을 사용합니다. 따라서 형식 문자열(두 번째 매개 변수)에 콜론 또는 마침표가 포함된 경우 입력 값(첫 번째 매개 변수)이 시간 데이터 형식인 경우 콜론 또는 마침표는 백슬래시로 이스케이프되어야 합니다.
4. 시간 데이터 형식이 포함된 FORMAT
다음 표에서는 value 인수에 사용할 수 있는 데이터 형식과 함께 .NET Framework 매핑에서 이에 해당하는 데이터 형식을 보여 줍니다.
Category | Type | .NET 형식 |
---|---|---|
숫자 | bigint | Int64 |
숫자 | int | Int32 |
숫자 | smallint | Int16 |
숫자 | tinyint | Byte |
숫자 | decimal | SqlDecimal |
숫자 | numeric | SqlDecimal |
숫자 | float | Double |
숫자 | real | Single |
숫자 | smallmoney | Decimal |
숫자 | money | Decimal |
날짜 및 시간 | date | DateTime |
날짜 및 시간 | time | TimeSpan |
날짜 및 시간 | datetime | DateTime |
날짜 및 시간 | smalldatetime | DateTime |
날짜 및 시간 | datetime2 | DateTime |
날짜 및 시간 | datetimeoffset | DateTimeOffset |
예
A. 간단한 FORMAT 예
다음 예에서는 다양한 culture에 따라 형식이 지정된 간단한 날짜를 반환합니다.
DECLARE @d AS DATE = '08/09/2024';
SELECT FORMAT(@d, 'd', 'en-US') AS 'US English',
FORMAT(@d, 'd', 'en-gb') AS 'British English',
FORMAT(@d, 'd', 'de-de') AS 'German',
FORMAT(@d, 'd', 'zh-cn') AS 'Chinese Simplified (PRC)';
SELECT FORMAT(@d, 'D', 'en-US') AS 'US English',
FORMAT(@d, 'D', 'en-gb') AS 'British English',
FORMAT(@d, 'D', 'de-de') AS 'German',
FORMAT(@d, 'D', 'zh-cn') AS 'Chinese Simplified (PRC)';
결과 집합은 다음과 같습니다.
US English British English German Simplified Chinese (PRC)
----------- ---------------- ----------- -------------------------
8/9/2024 09/08/2024 09.08.2024 2024/8/9
US English British English German Chinese (Simplified PRC)
----------------------- ---------------- ------------------------ -------------------------
Friday, August 9, 2024 09 August 2024 Freitag, 9. August 2024 2024年8月9日
B. 사용자 지정 서식 문자열이 포함된 FORMAT
다음 예에서는 사용자 지정 서식을 지정하여 숫자 값의 서식을 지정하는 방법을 보여 줍니다. 이 예제에서는 현재 날짜가 2024년 8월 9일이라고 가정합니다. 이러한 서식과 다른 사용자 지정 서식에 대한 자세한 내용은 사용자 지정 숫자 형식 문자열을 참조하세요.
DECLARE @d AS DATE = GETDATE();
SELECT FORMAT(@d, 'dd/MM/yyyy', 'en-US') AS 'Date',
FORMAT(123456789, '###-##-####') AS 'Custom Number';
결과 집합은 다음과 같습니다.
Date Custom Number
----------- --------------
09/08/2024 123-45-6789
C. 숫자 유형이 있는 FORMAT
다음 예제에서는 데이터베이스의 Sales.CurrencyRate
테이블에서 5개의 행을 AdventureWorks2022
반환합니다. 열 EndOfDateRate
은 테이블에 형식 돈 으로 저장됩니다. 이 예에서는 서식이 지정되지 않은 상태로 열이 반환된 다음 .NET 숫자 형식, 일반 형식 및 통화 형식 유형 중 하나로 서식이 지정됩니다. 이러한 형식과 다른 숫자 형식에 대한 자세한 내용은 표준 숫자 형식 문자열을 참조하세요.
SELECT TOP (5) CurrencyRateID,
EndOfDayRate,
FORMAT(EndOfDayRate, 'N', 'en-us') AS 'Numeric Format',
FORMAT(EndOfDayRate, 'G', 'en-us') AS 'General Format',
FORMAT(EndOfDayRate, 'C', 'en-us') 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
다음은 독일어 문화권(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 €
D. 시간 데이터 형식이 포함된 FORMAT
FORMAT
는 이스케이프되지 않기 때문에 NULL
.
이러한 경우에 반환 :
됩니다.
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에서 서식이 지정된 문자열을 반환합니다.
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
Format은 AM 또는 PM이 지정된 서식이 지정된 현재 시간을 반환합니다.
SELECT FORMAT(SYSDATETIME(), N'hh:mm tt'); --> returns 03:46 PM
SELECT FORMAT(SYSDATETIME(), N'hh:mm t'); --> returns 03:46 P
Format은 지정된 시간을 반환하고 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
Format은 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
Format은 지정된 시간을 24시간 형식으로 반환합니다.
SELECT FORMAT(CAST('2018-01-01 14:00' AS DATETIME2), N'HH:mm'); --> returns 14:00
E. 큰 숫자의 쉼표 구분 기호를 사용하여 서식 지정
다음 예제에서는 쉼표 구분 기호를 사용하여 큰 숫자의 서식을 지정하는 방법을 보여 줍니다.
SELECT FORMAT(1234567.89, 'N0') AS FormattedNumber;
결과 집합은 다음과 같습니다.
1,234,568
이 예제에서는 N
형식 지정자를 사용합니다.
N
지정자는 숫자 값에 사용되며, 10진수 위치 수는 형식 문자열을 변경하여 조정할 수 있습니다(예: 소수 자릿수 2개에 대한 N2
).
FORMAT ( value, format_string [, culture ] )
매개 변수
-
value
: 서식을 지정할 값입니다. -
format_string
: 적용할 형식을 지정하는 문자열입니다. -
culture
: (선택 사항) 서식 지정에 사용할 문화권을 지정하는 문자열입니다.
SELECT FORMAT(1234567.89, 'N0') AS FormattedNumber;
1,234,568