오래 여기저기 찾아봤는데 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 해서 사용하면 되겠다.
'[ DataBase ] > DB&Query' 카테고리의 다른 글
MySQL 자동증가, auto increment 값 초기화 하기 (0) | 2017.04.03 |
---|---|
쿼리 로그 보기 (0) | 2015.06.29 |
MSSQL split 기능 (0) | 2015.02.03 |
[MSSQL] 다른 테이블과 조인걸고 DELETE 하기 (0) | 2014.11.14 |
테이블에 걸려있는 트리거 확인 (0) | 2014.07.23 |
댓글