Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取具有分隔符计数的表的子字符串值_Mysql_Csv_Substring - Fatal编程技术网

Mysql 获取具有分隔符计数的表的子字符串值

Mysql 获取具有分隔符计数的表的子字符串值,mysql,csv,substring,Mysql,Csv,Substring,我有一个表格,有两列(value1,value2),带有CSV格式的值。我想创建一个tableB,它的字段与tableA相同,但在这两列中,值的数量是有限的(请注意,我不知道逗号之间有多少个字符)。此“限制”是CSV的前n个元素 表A +----+----------+----------------------+----------------------+ | id | other | value1 | value2 | +---

我有一个表格,有两列(value1,value2),带有CSV格式的值。我想创建一个tableB,它的字段与tableA相同,但在这两列中,值的数量是有限的(请注意,我不知道逗号之间有多少个字符)。此“限制”是CSV的前n个元素

表A

+----+----------+----------------------+----------------------+
| 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