DBILITY

sql server unpivot string separate characters to row 본문

database/mssql

sql server unpivot string separate characters to row

DBILITY 2021. 9. 29. 18:15
반응형

독거 가능성 100% 노후에 라면값이라도 하게 광고 한번씩 클릭하시오!

Please click on the ad so that I can pay for ramen in my old age!
老後にラーメン代だけでもするように広告を一回クリックしてください。
点击一下广告,让老后吃个泡面钱吧!

SQL Server 2014를 사용 중이다.

다음 함수는 문자열을 구분자로 분리하여 테이블로 반환한다.

SELECT VALUE FROM dbo.FN_SPLIT('10,20,30,40',',')

결과는 다음과 같다.

실행결과

소스는 아래와 같다.

CREATE FUNCTION dbo.FN_SPLIT(
    @strVal VARCHAR(MAX),-- 입력문자열
    @splitChar VARCHAR(10) -- 구분자
)
RETURNS @SPLIT_TABLE TABLE ( 
	IDX   INT,
	VALUE VARCHAR(1000)
)
AS
BEGIN
    DECLARE @oPos INT, @nPos INT
    DECLARE @tmpVar VARCHAR(1000)
    DECLARE @cnt INT

    SET @cnt = 1;
    SET @oPos = 1;
    SET @nPos = 1;

    WHILE (@nPos > 0)
        BEGIN

            SET @nPos = CHARINDEX(@splitChar, @strVal, @oPos)

            IF @nPos = 0
                SET @tmpVar = RIGHT(@strVal, LEN(@strVal) - @oPos + 1)
            ELSE
                SET @tmpVar = SUBSTRING(@strVal, @oPos, @nPos - @oPos)

            IF LEN(@tmpVar) > 0
                INSERT INTO @SPLIT_TABLE VALUES (@cnt, @tmpVar)
            ELSE
                INSERT INTO @SPLIT_TABLE VALUES (@cnt, '')

            SET @oPos = @nPos + 1
            SET @cnt = @cnt + 1;
        END
    RETURN
END

GO

FN_SPLIT.sql
0.00MB

반응형
Comments