개발 창고/Database

[MSSQL] Number Format

로이제로 2022. 2. 18. 14:25
반응형

 일반적으로 MSSQL에서 Number / Decimal / Int 등 숫자형의 경우 단순 숫자만 저장되기 때문에 보여주기 위해서는 천 단위 콤마가 필요한 경우가 많습니다.

 

 단순 숫자의 천 단위 표시 시에는 #을 활용할 수 있지만, 일부 프로그램에서 #을 변수로 사용하는 경우가 있어 (OZ Report의 경우) #을 Format으로 사용하지 못하는 경우도 있습니다. 때문에 두 가지 방식으로 표현할 수 있습니다.

 

1. Format(값, ###,###)

2. Replace(Replace(Format(값, 'C', 'en-us'), '$', ''), '.00', '')

 

 첫 번째는 단순 숫자를 콤마 찍는 방식이고, 두 번째는 통화 표기법으로 변경 후에 통화 표기를 없애주는 방식입니다.
(이건 우회하는 방식이라 웬만하면 첫 번째 방식으로 하고 도저히 #이 안되는 경우에만 두 번째 방식으로 사용)

 

다음 Query를 실행해보면

SELECT FORMAT(1234567, '###,###')		as 일반
     , FORMAT(1234567, 'C', 'en-us')		as Step1_통화형태
     , REPLACE(FORMAT(1234567, 'C', 'en-us'), '$', '')	as Step2_달러제거
     , REPLACE(REPLACE(FORMAT(1234567, 'C', 'en-us'), '$', ''), '.00', '')	as Step3_소수점제거

아래와 같이 더 쉽게 확인이 가능합니다.

보시는 바와 같이

첫 번째 컬럼은 일반적으로 Format으로 개행을 넣은 경우이고,

두 번째 컬럼은 통화 형태로만 변경

세 번째 컬럼은 통화로 변경한 값에서 $표시 제거

네 번째 컬럼은 통화로 변경한 값에서 $표시 제거 후 소수점(.00)을 제거

한 형태입니다.

 

 중간에 Format(1234567, 'C', 'en-us')의 경우 달러(en-us) 표기로 한 것이기 때문에 소수점 둘째 자리까지 표기된 것이며 이를 제거한 것입니다. 이를 활용하면 원화(ko-kr), 엔화 (ja-jp) 등으로도 변환 가능합니다.

SELECT FORMAT(1234567, 'C', 'un-es')	as UnitedStates
     , FORMAT(1234567, 'C', 'ko-kr')	as Korea
     , FORMAT(1234567, 'C', 'ja-jp')	as Japan
     , FORMAT(1234567, 'C', 'zh-cn')	as Chinese
     , FORMAT(1234567, 'C', 'vi-vn')	as Vietnam

반응형