메뉴 건너뛰기

tnt_db

MS-SQL ORACLE -> MSSQL 시 LPAD 처리

운영자 2003.10.08 10:37 조회 수 : 4050 추천:49

결국 펑션으로 처리는 했으나 성능이 이슈가 되지 않을까 생각됩니다
오라클에서도 펑션은 상당한 성능저하를 초래하더라구요

오라클의..
SELECT
    LPAD(TO_CHAR(SUM(INVIEW.BDR),'9,999,999,999,999'),20,' ')||
    LPAD(TO_CHAR(SUM(INVIEW.BCR),'9,999,999,999,999'),20,' ')||
    LPAD(TO_CHAR(SUM(INVIEW.DR) ,'9,999,999,999,999'),20,' ')||
    LPAD(TO_CHAR(SUM(INVIEW.CR) ,'9,999,999,999,999'),20,' ')||
    '       '                                                  
FROM

를 아래와 같이...

SELECT
    DBO.LPAD(DBO.ADDCOMMA(9876543210987),20,'_')  +
    DBO.LPAD(DBO.ADDCOMMA(9876543210987),20,'_')  +
    DBO.LPAD(DBO.ADDCOMMA(9876543210987),20,'_')  +
    DBO.LPAD(DBO.ADDCOMMA(9876543210987),20,'_')  +
    '_______'

결과값
_____876,543,210,987_____876,543,210,987_____876,543,210,987_____876,543,210,987_______

'_' 만 ' ' 로 바꾸면 되겠죠

##############
CREATE FUNCTION ADDCOMMA
                     (@I_MONEY  DECIMAL)
RETURNS VARCHAR(200)
AS
BEGIN
     DECLARE    @R_STR      VARCHAR(200),
                @T_STR      VARCHAR(200),
                @T_STR_LEN  INT,
                @T_POS      INT

        SET @R_STR      = ''
        SET @T_STR      = REVERSE(@I_MONEY)
        SET @T_STR_LEN  = LEN(@T_STR)
        SET @T_POS      = 0

    WHILE @T_STR_LEN/3 > @T_POS
    BEGIN
        IF @T_POS=0
            SET @R_STR = SUBSTRING(@T_STR,1,3)
        ELSE
            SET @R_STR = @R_STR + ',' + SUBSTRING(@T_STR,@T_POS*3+1,3)

        SET @T_POS = @T_POS+1
    END

    RETURN REVERSE(@R_STR)
END

#############
CREATE FUNCTION LPAD
                     (@I_STR  VARCHAR(200), @I_STR_LEN INT, @I_FILL_STR VARCHAR)
RETURNS VARCHAR(200)
AS
BEGIN
     DECLARE @R_STR VARCHAR(200),
             @T_DIFF_LEN INT

        SET @T_DIFF_LEN = @I_STR_LEN -  LEN(@I_STR)

        IF @T_DIFF_LEN >= 0  
                SET @R_STR = REPLICATE(@I_FILL_STR, @T_DIFF_LEN) + @I_STR
        ELSE
                SET @R_STR = @I_STR
     RETURN @R_STR

END
위로