【问题标题】:Convert '1|2|India' this pipe delimited String set as column转换 '1|2|India' 将此管道分隔的字符串设置为列
【发布时间】:2018-11-06 17:41:39
【问题描述】:

我有一个三列的表(State_id、Country_id、state_name)。我有这样的管道分隔字符串(1|2|ABC)。

现在每当我点击触发器时我想做什么,无论这个管道分隔的字符串是转换为列名,如

Insert INTO tablename values (1,2,ABC);

每次我都有不同的管道分隔字符串和不同的列。可能是 4 个或更多。

BEGIN
DECLARE a INT Default 0 ;
DECLARE str VARCHAR(255);
simple_loop: LOOP
    SET a=a+1; 
    SET str=SPLIT_STR(new.remarks,"|",a); 
        IF str='' THEN
            LEAVE simple_loop; 
        END IF;
insert into new.tablename values (str);
END LOOP simple_loop;

结束

我已经创建了 SPLIT_STR,它将值一分为二

RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
   LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
   delim, '')

我试过这样,但它不起作用。

【问题讨论】:

  • 这是用于 Oracle 还是 MySQL?从您尝试过的语法来看,它看起来像 MySQL,在这种情况下,Oracle 标记需要去避免混淆。
  • 这是mysql。
  • 啊,好的。我只知道甲骨文。
  • 什么split_str函数不起作用,语法错误,插入new.tablename?
  • 这种问题隐约表明设计不佳

标签: mysql database triggers mysql-workbench


【解决方案1】:

使用 substring_index 从分隔符位置拆分您的字符串,如下所示:

 Insert INTO tablename
 select substring_index('1|2|ABC','|',1),
        substring_index(substring_index('1|2|ABC','|',2),'|',-1),
        substring_index('1|2|ABC','|',-1);

【讨论】:

  • 如果我每次都有不同的管道分隔字符串怎么办?我如何使这个查询动态为不同的行数
  • 您可以使用 find_in_set 函数进行类似条件,并根据计数生成动态查询
  • 你能告诉我什么是代码吗?对我有很大帮助
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多