본문 바로가기
[ DataBase ]/DB&Query

mysql 에서 splite 기능 만들기

by 관이119 2016. 2. 25.

 

 

 

 

 

오래 여기저기 찾아봤는데 splite 기능을 하는 테이블 반환 함수가 없다.

그렇다고 프로시저로 만들어서 call 해도 그거도 못쓴다고 되있고.

그래서 조합해서 써보기로 했다.

 

우선 함수를 하나 만든다

 

CREATE FUNCTION `SPLIT_STR`(

oritext longtext,

    splitchar char(1),

    pos int

) RETURNS varchar(2000) CHARSET utf8

BEGIN

  RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(oritext, splitchar, pos),CHAR_LENGTH(SUBSTRING_INDEX(oritext, splitchar, pos -1)) + 1),splitchar, '');

END

 

 

그리고 프로시저를 만든다.

 

CREATE PROCEDURE `split_proc`(

tempchar  longtext

        ,splitechar  char(1)

)

BEGIN

-- call split_proc('A|B|C|D','|');

DECLARE spliti int;

        DECLARE tempresult char(255);

        

        CREATE TEMPORARY TABLE IF NOT EXISTS temp_table (

splitestr char(255)

);



SET spliti =1; 


WHILE spliti != 0 DO


SET tempresult = (SELECT SPLIT_STR(tempchar,splitechar,spliti));

IF tempresult != ''

THEN

INSERT INTO temp_table

(

splitestr

)

VALUES (

tempresult

);

SET spliti = spliti+1;

ELSE

SET spliti = 0;

END IF;


END WHILE;

       


SELECT * FROM temp_table;

        

        drop temporary table temp_table;

END

 

그리고 테스트 해보니 잘돌아간다.

 

call call split_proc('A|B|C|D','|');

 

이제 위 프로시저를 수정해서 사용하면 된다.

잘라낸내용을 다른테이블과 join 해서 사용하고 싶으면 위 프로시저내용을 사용할 프로시저에 그대로 붙여넣고 temp_table 과 join 해서 사용하면 되겠다.

 


 

 

 

댓글