MySQL中的复杂拆分逗号值

时间:2017-11-23 19:40:50

标签: mysql database split comma

下面是我的问题

我有字符串“1,2,3,4,5”。我想拆分值并放入一个临时表但我想插入1个位置,我的意思是输出将是

N°1 | N°2
---------
1   |  2
2   |  3
3   |  4
4   |  5

我希望有人解决我的问题。谢谢!

2 个答案:

答案 0 :(得分:2)

对于一个简单的表格,如下面的语法

创建的表格
CREATE TABLE `demo2` (
  `no1` int(11) NOT NULL,
  `no2` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

您可以尝试使用下面的存储过程。

  

为每个插入的字符串中的每个值添加+1的示例

CREATE PROCEDURE `dowhile`(IN `s1` VARCHAR(255))
BEGIN
SET @length = CHAR_LENGTH(`s1`);
SET @counter = 1;
WHILE @counter <= @length DO
    SET @char = SUBSTRING(`s1`, @counter, 1);
    IF STRCMP(@char, ",") <> 0 THEN
    INSERT INTO `demo2` (`no1`,`no2`) VALUES (@char,@char+1);
    END IF;
    SET @counter = @counter + 1;
  END WHILE;
  END
  

在字段no1中添加nth元素并在no2中添加nth+1字符串中的CREATE PROCEDURE `dowhile`(IN `s1` VARCHAR(255)) BEGIN SET @length = CHAR_LENGTH(`s1`); SET @counter = 1; WHILE @counter <= @length DO SET @next_el_counter = @counter + 2; SET @char = SUBSTRING(`s1`, @counter, 1); IF STRCMP(@char, ",") <> 0 THEN INSERT INTO `demo2` (`no1`,`no2`) VALUES (@char,SUBSTRING(`s1`, @next_el_counter, 1)); END IF; SET @counter = @counter + 1; END WHILE; END 运算元素(不包括逗号)

CALL `dowhile`('1,2,3,4,5');

别忘了给它打电话......

bitstring1 = "00001111";
bitstring2 = "11110000";

答案 1 :(得分:1)

首先,我将要求您浏览this LINK链接,以便实现在列中存储分隔列表的缺点。

无论如何,如果您使用MySql完成此任务,则需要使用过程和函数执行此操作,如下所示:

第1步:使用指定位置的分隔符,分割数据创建功能

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, '');

现在,上述函数将仅为给定位置分割数据。为了拆分整个字符串,我们需要迭代这个函数。这是我们的第2步。

第2步:创建过程以迭代上述功能;

CREATE PROCEDURE ABC(IN fullstr varchar(1000))
   BEGIN
      DECLARE a INT Default 0;
      DECLARE str VARCHAR(255);
      DECLARE prev VARCHAR(255);
      simple_loop: LOOP
         SET a=a+1;
         IF a=1 THEN
             SET prev=SPLIT_STR(fullstr,",",a);
             SET a=a+1;
         END IF;
         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 t1 values (prev,str);
         SET prev=str;
   END LOOP simple_loop;

第3步:致电程序:

       call abc(columnName);

第4步:temp表中获取数据:

select *
from temp;

希望它有所帮助!