[MySQL & MariaDB] 문자열 분리해서 임시테이블에 넣기 split
IN Clause 쿼리를 사용하고 싶다거나 또는 특정 캐릭터 문자열로 나누어서 사용해야 할 때 사용할 수 있는 프로시저다.
다음과 같이 사용할 수 있다.
call string_split('AAA&|BBB&|CCC&|', '&|');
select * from tmpContents;
DELIMITER $$
USE `dbname`$$
DROP PROCEDURE IF EXISTS string_split$$
CREATE DEFINER=`user`@`%` PROCEDURE `string_split`(
IN `sStringIn` LONGTEXT,
IN `splitChar` VARCHAR(64)
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '문자열 분리'
BEGIN
DECLARE mText LONGTEXT;
DECLARE mValue LONGTEXT;
SET max_heap_table_size = 1024 * 1024 * 256;
DROP TEMPORARY TABLE IF EXISTS tmpContents;
CREATE TEMPORARY TABLE tmpContents
(
Content VARCHAR(4096) NOT NULL DEFAULT ''
) ENGINE = MEMORY;
SET mText = sStringIn;
WHILE IFNULL(mText, '') != '' DO
SET mValue = SUBSTRING_INDEX(mText, splitChar, 1);
SET mText = SUBSTRING(mText, CHAR_LENGTH(mValue) + CHAR_LENGTH(splitChar) + 1);
INSERT INTO tmpContents (Content) VALUES (mValue);
END WHILE;
END$$
DELIMITER ;