프로그램 자료/MySQL & MariaDB

[MySQL & MariaDB] 문자열 분리해서 임시테이블에 넣기 split

motolies 2018. 9. 12. 20:22


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 ;