견적서나 세금계산서에 보시면 금액을 우리말로 적는란이있잖아요..
예들들면 공급금액이 총 7,900,000 이라면
칠백구십만원정..이런거요..
위처럼 숫자를 우리말로 번역(?) 할려고 하면 순수 쿼리로 어떤식으로 해야될까요?
조언좀 부탁 드립니다..
floor와 case when을 사용한 scalar function을 만들어보세요..
그럼..
네?floor?
scale funtion??
첨 들어보는데 자세히좀 갈쳐주세효...
부탁드립니다요..
먼저 dummy테이블을 하나 만듭니다.
create table dummy_t(
digit int not null,
korean varchar(10) not null
)
데이터는 아래처럼 만듭니다.
1 일2 이3 삼4 사5 오6 육7 칠8 팔9 구10 십100 백1000 천10000 만100000 십1000000 백10000000 천100000000 억....
주의점은 위에서 보시다 시피 "십만"을 입력하지 않고 "십"을 입력합니다.
십억, 백억 도 마찬가지고요.(십억->십, 백억->백, 천억->천)
이제 사용자 정의 스칼라함수를 만듭니다.
원리는 해당 자리수와 그 값을 한글로 변환해서 이어 붙이는 겁니다.
가령, 200이라면 2 * 100이므로, "이" + "백"하면 된다는 겁니다.
create function uf_DigitToKorean(@currency int) returns varchar(1000)asbegin declare @char_currency varchar(100), @len int, @cnt int, @rtn varchar(1000) set @char_currency = convert(varchar,@currency) set @len = len(@char_currency) set @rtn = '' set @cnt = 1 while @cnt <= @len begin --입력받은 숫자길이만큼 루프돕니다.--먼저 자리수의 해당 값의 한글을 찾아 옵니다.
select @rtn = @rtn + isnull(Korean,'') from dummy_t where Digit = convert(int,substring(@char_currency, @cnt, 1))
--해당 값의 자리수를 구해서 한글을 찾아옵니다
if @@rowcount > 0 begin
select @rtn = @rtn + isnull(Korean, '') from dummy_t where Digit = convert(int, '1' + replicate('0',len(substring(@char_currency, @cnt, @len)) -1)) and digit <> 1 end set @cnt = @cnt + 1 end return @rtn
end
--------------------------------------------
실행결과는 아래와 같습니다.
select dbo.uf_DigitToKorean(987654321)
구억팔천칠백육십오만사천삼백이십일
(1개 행 적용됨)