728x90

create function NumberToHanWords(@money as varchar(16))
returns varchar(35)
as
       begin
              declare @map varchar(35)
              declare @nlen int
              declare @mlen int
              declare @npos int
              declare @nchar char(1)
              declare @str varchar(70)
              declare @tmp varchar(2)
              set @npos=0
              set @map = '천백십조천백십억천백십만천백십 '
              set @nlen=len(@money)
              set @mlen=len(@map)
              set @str=''
              while @npos <
=@nlen
                     begin
                            set @nchar = substring(@money,@npos+1,1)
                            select @tmp= case @nchar
                                          when '1' then '일'
                                          when '2' then '이'
                                          when '3' then '삼'
                                          when '4' then '사'
                                          when '5' then '오'
                                          when '6' then '육'
                                          when '7' then '칠'
                                          when '8' then '팔'
                                          when '9' then '구'
                                          when '0' then '영'
                                   end
                            if @tmp <> '영'
                                   begin
                                          set @str= @str + @tmp + substring(@map, @mlen+1-@nlen + @npos +1  ,1)
                                   end
                            else
                                   begin
                                          if ( @nlen - @npos - 1) % 4 = 0  and (right(@str,1) <>'조' and right(@str,1)<>'억' and right(@str,1)<>'만')
                                                 set @str= @str +  substring(@map, @mlen+1-@nlen + @npos+1 ,1)
                                   end
                            set @npos=@npos +1
                     end
              return replace(@str,' ','')
       end

728x90

CREATE function NumbersWords(@s VARCHAR(50))
--English words for numbers
returns VARCHAR(1024)
as


    BEGIN
    DECLARE @a char(1),@b char(1),@c char(1),@i int, @j int, @result VARCHAR(1024), @orlen int
    SET @orlen=LEN(@s)
    IF LEN(@s) % 3>0
           SET @s=' '+@S
    IF LEN(@s) % 3>0
           SET @s=' '+@S
    SET @i=1 SET @result=''
    IF LEN(@s)=1 AND @s='0'
           SET @result='zero'
    WHILE @i<=LEN(@s)
           BEGIN
           SET @j=LEN(@s)-@i+1
           SET @a=substring(@s,@j,1)
           SET @b=substring(@s,@j-1,1)
           SET @c=substring(@s,@j-2,1)
           IF isnumeric(@a)=1
                  BEGIN
                  SET @result=case
                         WHEN (@i-1=3) AND (@c+@b+@a<>'000') THEN 'thousand'
                         WHEN (@i-1=6) AND (@c+@b+@a<>'000') THEN 'million'
                         WHEN (@i-1=9) AND (@c+@b+@a<>'000') THEN 'billion'
                         WHEN (@i-1=12) AND (@c+@b+@a<>'000') THEN 'trillion'
                         WHEN (@i-1=15) AND (@c+@b+@a<>'000') THEN 'quadrillion'
                         WHEN (@i-1=18) AND (@c+@b+@a<>'000') THEN 'quintillion'
                         WHEN (@i-1=21) AND (@c+@b+@a<>'000') THEN 'sextillion'
                         WHEN (@i-1=24) AND (@c+@b+@a<>'000') THEN 'septillion'
                         WHEN (@i-1=27) AND (@c+@b+@a<>'000') THEN 'octillion'
                         WHEN (@i-1=30) AND (@c+@b+@a<>'000') THEN 'nonillion'
                         WHEN (@i-1=33) AND (@c+@b+@a<>'000') THEN 'decillion'
                         WHEN (@i-1=36) AND (@c+@b+@a<>'000') THEN 'undecillion'
                         WHEN (@i-1=39) AND (@c+@b+@a<>'000') THEN 'duodecillion'
                         WHEN (@i-1=42) AND (@c+@b+@a<>'000') THEN 'tredecillion'
                         WHEN (@i-1=45) AND (@c+@b+@a<>'000') THEN 'quattuordecillion'
                         WHEN (@i-1=48) AND (@c+@b+@a<>'000') THEN 'quindecillion'
                         WHEN (@i-1=51) AND (@c+@b+@a<>'000') THEN 'sexdecillion'
                         WHEN (@i-1=54) AND (@c+@b+@a<>'000') THEN 'septendecillion'
                         WHEN (@i-1=57) AND (@c+@b+@a<>'000') THEN 'octodecillion'
                         WHEN (@i-1=60) THEN 'novemdecillion'
                         ELSE ''
                         END+' '+@result
                  IF @b!='1' OR @b=' '
                         SET @result=case @a
                                       WHEN '1' THEN 'one'
                                       WHEN '2' THEN 'two'
                                       WHEN '3' THEN 'three'
                                       WHEN '4' THEN 'four'
                                       WHEN '5' THEN 'five'
                                       WHEN '6' THEN 'six'
                                       WHEN '7' THEN 'seven'
                                       WHEN '8' THEN 'eight'
                                       WHEN '9' THEN 'nine'
                                       ELSE ''
                                       END+' '+@result
                  IF (isnumeric(@b)=1 )AND (@b!='0')
                         IF @b='1'
                         SET @result=case @a
                                       WHEN '0' THEN 'ten'
                                       WHEN '1' THEN 'eleven'
                                       WHEN '2' THEN 'twelve'
                                       WHEN '3' THEN 'thirteen'
                                       WHEN '4' THEN 'fourteen'
                                       WHEN '5' THEN 'fifteen'
                                       WHEN '6' THEN 'sixteen'
                                       WHEN '7' THEN 'seventeen'
                                       WHEN '8' THEN 'eighteen'
                                       WHEN '9' THEN 'nineteen'
                                       ELSE ''
                                       END+' '+@result
                         ELSE
                         SET @result=case @b
                                       WHEN '2' THEN 'twenty'
                                       WHEN '3' THEN 'thirty'
                                       WHEN '4' THEN 'fourty'
                                       WHEN '5' THEN 'fifty'
                                       WHEN '6' THEN 'sixty'
                                       WHEN '7' THEN 'seventy'
                                       WHEN '8' THEN 'eighty'
                                       WHEN '9' THEN 'ninety'
                                       ELSE ''
                                       END+' '+@result
                  END
                  IF (isnumeric(@c)=1)AND (@c!='0')
                         SET @result=case @c
                         WHEN '1' THEN 'one'
                         WHEN '2' THEN 'two'
                         WHEN '3' THEN 'three'
                         WHEN '4' THEN 'four'
                         WHEN '5' THEN 'five'
                         WHEN '6' THEN 'six'
                         WHEN '7' THEN 'seven'
                         WHEN '8' THEN 'eight'
                         WHEN '9' THEN 'nine'
                         ELSE ''
                         END+' hundred'+' '+@result
           SET @i=@i+3
           END
    SET @result=LTRIM(RTRIM(@result))
    RETURN @result
END

728x90

기능설명

comma (,), semi colon(;) 등으로 구분된 문장을
Row 단위로 분리해서 처리하고자 할 때 사용할 수 있는 Query입니다.
(spilit 함수와 유사한 기능을 가지고 있지요.)

여기서 예로 든 것은 SP로 되어 있지만,
때에 따라서 Function으로 만들어 사용해도 효과적일 것입니다.

Script 내의 다음 구문이 Row 단위로
분리된 data를 처리하는 부분입니다.


print substring(@list, @sp,  @ep-1)


이것을 table에 넣는 logic으로 바꿀 수도 있고,
또는 결과물을 union으로 묶어서 RecordSet 형태로
떨어트릴 수 도 있을 것입니다.
 

Parameters 설명
 

1. @list varchar(100)
split하기를 원하는 문장 입력
함수를 사용한다면 컬럼이 될 수 도 있다.
 

2. @delimiter varchar(10)
split할 때 기준으로 삼을 구분자

예: , ; |


Script

/*
    작성자 : 한기환
    작성일 : 2005-02-22
    내  용 : 특정 구분자를 가지는 문자열을 Row단위로 분리해서 반환한다.

    사용예 :
        EXEC dbo.usp_SplitByDelimiter @list= '한기환,정원혁,하성희', @delimiter = ','
*/

CREATE PROCEDURE dbo.usp_SplitByDelimiter
    @list varchar(100)
    , @delimiter varchar(10)
AS
set nocount on

declare
--@list varchar(100), @i int
--  , @delimiter varchar(10) -- delimitor
    @len int -- Length of a sentence
    , @ep int -- End Point
    , @sp int -- Start Point
 
--set @delimiter = ','
--set @list= '한기환,정원혁,하성희'
set @len = len(@list)
set @sp = 1
set @ep = 1

-- Data의 마지막을 확인하기 위해서
-- End point는 항상 0보다 커야하고, Start Point는 전체 길이보다 작거나 같아야 한다.
while (@ep > 0 and @sp <= @len)
begin
    set @ep =
        case
            when (charindex(@delimiter, substring(@list, @sp, @len)) = 0)
                then @len + 1
            else
                charindex(@delimiter, substring(@list, @sp, @len))
            end

--  print cast(@list as varchar) +':'+cast(@sp as varchar) +':'+ cast(@ep as varchar)
    print substring(@list, @sp,  @ep-1)
    set @sp = @sp + @ep
end

set nocount off

GO

+ Recent posts