作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在表的一列中有值例如:Abc-a,d,f,g,h;Acd-b,h,i,j;Asx-i,k,l,m
现在我想要的是我需要将值 a、d、f、g、h 复制到名为“Abc”的单独列中,类似地将 b、h、i、j 复制到另一列“Acd”中(增加清晰度上述一点,我希望所有逗号分隔的值都位于单独的列下,并且列名称将是在“-”之前添加前缀的字符串)。我应该使用分隔符“;”进行分割
最佳答案
首先,永远不要将数据存储为逗号分隔值,这是一种不好的做法,您应该始终标准化数据
现在就您当前的情况而言,如果模式相同,您可以使用 substring_index()
函数提取如下数据
mysql> select substring_index(substring_index('Abc-a,d,f,g,h;Acd-b,h,i,j;Asx-i,k,l,m',';',1),'Abc-',-1) as Abc ;
+-----------+
| Abc |
+-----------+
| a,d,f,g,h |
+-----------+
mysql> select substring_index(substring_index('Abc-a,d,f,g,h;Acd-b,h,i,j;Asx-i,k,l,m',';',2),'Acd-',-1) as Acd;
+---------+
| Acd |
+---------+
| b,h,i,j |
+---------+
mysql> select substring_index(substring_index('Abc-a,d,f,g,h;Acd-b,h,i,j;Asx-i,k,l,m',';',-1),'Asx-',-1) as Asx;
+---------+
| Asx |
+---------+
| i,k,l,m |
+---------+
最后将所有内容放在一起,您可以将更新命令设置为
update your_table
set
Abc = substring_index(substring_index('Abc-a,d,f,g,h;Acd-b,h,i,j;Asx-i,k,l,m',';',1),'Abc-',-1),
Acd = substring_index(substring_index('Abc-a,d,f,g,h;Acd-b,h,i,j;Asx-i,k,l,m',';',2),'Acd-',-1),
Asx = substring_index(substring_index('Abc-a,d,f,g,h;Acd-b,h,i,j;Asx-i,k,l,m',';',-1),'Asx-',-1) ;
请注意,我在上面的示例中添加了完整的字符串,您可以只添加存储值的列名称
关于mysql - 使用分隔符将一列拆分为三个单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838961/
我是一名优秀的程序员,十分优秀!