MySQL 字符串用逗号分隔

标签 mysql stored-procedures stored-functions

我有 String asdasdwdfef,rgrgtggt,weef 并且我想要如下所示的表格格式输出

id      decription
1       asdasdwdfef
2       rgrgtggt
3       weef

为此我创建了一个程序 这是我的程序

DELIMITER ;;
CREATE Procedure Split(_RowData text, _Delimeter text)
BEGIN
    DECLARE _Iterator INT default 1;
    DECLARE _FoundIndex INT;
    DECLARE _Data varchar(255);
    SET _FoundIndex = LOCATE(_Delimeter,_RowData);
    DROP TABLE IF EXISTS _RtnValue;
    CREATE temporary TABLE _RtnValue(ID INT AUTO_INCREMENT NOT NULL, description text, primary key(ID));
    WHILE _FoundIndex > 1 DO
        INSERT INTO _RtnValue (description)
        SELECT
        _Data = LTRIM(RTRIM(SUBSTRING(_RowData, 1, _FoundIndex - 1)));
        set _RowData = SUBSTRING(_RowData, _FoundIndex + LENGTH(_Delimeter) / 2, LENGTH(_RowData));
        SET _Iterator = _Iterator + 1;
        SET _FoundIndex = LOCATE(_Delimeter, _RowData);
    END WHILE;
    INSERT INTO _RtnValue(description) SELECT _Data = LTRIM(RTRIM(_RowData));
    select * from _RtnValue;
END

但是当我使用以下命令执行它时

call Split('asdasdwdfef,rgrgtggt,weef', ',');

它给了我以下输出:

id      decription
1       NULL
2       NULL
3       NULL

请告诉我如何解决此问题。 我正在使用 MySQL。

最佳答案

我得到了答案

首先创建新函数

CREATE FUNCTION SPLIT_STR(x VARCHAR(255), delim VARCHAR(12), pos INT)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, '');

然后创建存储过程

DELIMITER ;;
CREATE PROCEDURE Split(in fullstr varchar(255))
BEGIN
    DECLARE a INT Default 0 ;
    DECLARE str VARCHAR(255);

    DROP TABLE IF EXISTS my_temp_table;
    CREATE temporary TABLE my_temp_table(ID INT AUTO_INCREMENT NOT NULL, description text, primary key(ID));

    simple_loop: LOOP
        SET a=a+1;
        SET str=SPLIT_STR(fullstr,",",a);
        IF str='' THEN
            LEAVE simple_loop;
        END IF;
        #Do Inserts into temp table here with str going into the row
        insert into my_temp_table (description) values (str);
   END LOOP simple_loop;
   select * from my_temp_table;
END

之后,当我通过 call Split('asas,d,sddf,dfd'); 调用它时,它会给我想要的输出。

感谢您的每一个建议。

关于MySQL 字符串用逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118555/

相关文章:

php - 内爆在不同的帖子中不起作用

MySQL优化存储过程中慢UNION查询

c# - 平均存储过程中的空列

oracle - 从 ado.net 调用 Oracle 存储函数并获取结果的正确方法是什么?

php - 如何在单次插入时插入具有不同日期的相同值?

php - 来自日期选择器的输入中断了来自下拉列表的输入

用于存储差异很大的数值的 MySQL 结构

sql - SQL Server存储过程-插入语法错误

mysql - mysql存储函数的奇怪问题

postgresql - Postgres : Function check duplicates in table