[MSSQL] 수학함수를 이용한 index to excel column

2014. 11. 20. 12:19Coders

예전에 닷넷(C#)으로 만들었던 index를 엑셀 컬럼 코드로 변환하는 메서드를 MSSQL 함수로 필요하여 만들었습니다. 대충 만들고 적용해 보니 잘 작동 합니다.


사실, A to Z 또는 A to ZZ 까지는 간단하게 (예상치로) 만들 수 있으나, 여기에 소개되는 함수는, ZZZ 또는 그 이상 확장이 가능합니다.


FLOOR, LOG, POWER 라는 수학 관련 함수가 동원 되었습니다.

로그(LOG)함수까지 튀어 나와서 해당 식에 대한 설명은 하지 않습니다.

(네네, 솔직히 잘 모르고요, 이 역시 제 개인의 데이터 저장 공간으로 봐 주세요.)


CREATE FUNCTION [dbo].[ufn_get_translate_index_to_xls_col]
(	
	 @col_index INT
)
RETURNS VARCHAR(10)
AS
BEGIN
    IF @col_index < 0
        RETURN NULL;

    DECLARE @xls_col    VARCHAR(10),
            @a          INT,
            @x          INT,
            @i          INT;

    SET @xls_col = '';
    SET @a = 26;
    SET @x = FLOOR(LOG( ( @col_index * ( @a - 1 ) / @a ) + 1, @a ) );

    SET @col_index -= (POWER(@a, @x) - 1) * @a / (@a - 1);
    SET @i = @x + 1;

    WHILE ( @col_index + @i > 0 )
    BEGIN
        SET @xls_col = CHAR(65 + @col_index % @a) + @xls_col;
        SET @col_index = @col_index / @a;
        SET @i = @i - 1;
    END;


    RETURN @xls_col;

END
GO