Mysql 获取具有分隔符计数的表的子字符串值
我有一个表格,有两列(value1,value2),带有CSV格式的值。我想创建一个tableB,它的字段与tableA相同,但在这两列中,值的数量是有限的(请注意,我不知道逗号之间有多少个字符)。此“限制”是CSV的前n个元素 表AMysql 获取具有分隔符计数的表的子字符串值,mysql,csv,substring,Mysql,Csv,Substring,我有一个表格,有两列(value1,value2),带有CSV格式的值。我想创建一个tableB,它的字段与tableA相同,但在这两列中,值的数量是有限的(请注意,我不知道逗号之间有多少个字符)。此“限制”是CSV的前n个元素 表A +----+----------+----------------------+----------------------+ | id | other | value1 | value2 | +---
+----+----------+----------------------+----------------------+
| id | other | value1 | value2 |
+----+----------+----------------------+----------------------+
| 1 | other1 | 111,222,333,444 | 1616,17,1,8,19,2020 |
| 2 | other2 | 55,6,7777,8,9 | 21,22,23 |
| 3 | other3 | 10101,11.11,13,14,15 | 242424,2525,26,27 |
+----+----------+----------------------+----------------------+
表B(限制为3个元素)
编辑:
我没有提到这些表有大量的元素(以及许多其他列,如“other”)。因此,我更喜欢使用:
create table tableB LIKE tableA;
INSERT tableB SELECT * FROM tableA;
然后更新value1和value2(在两个不同的事务中-事实上,我有91个这样的列)。这可能比在单个查询中包含所有值的“创建表”更有效
编辑2(解决方案): SQLFiddle: 您可以使用MySQL的功能,以及:
请参见。是否有办法将CSV视为一个表,然后选择要使用的列数,再次作为一个组?我知道你的答案正是我所需要的(很多THK的答案!)。。只是想知道…@kairos:那就照你的建议去做吧<代码>创建表格,然后
更新
@kairos:更新表格b SET value1=子字符串索引(value1',',',',',3),value2=子字符串索引(value2',',',3)代码>
create table tableB LIKE tableA;
INSERT tableB SELECT * FROM tableA;
CREATE TABLE TableB
SELECT id,
other,
SUBSTRING_INDEX(value1, ',', 3) AS value1,
SUBSTRING_INDEX(value2, ',', 3) AS value2
FROM TableA