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

时间:2012-10-10 15:51:45

标签: mysql csv substring

我有一个包含2列(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个元素)

+----+----------+----------------------+----------------------+
| id |   other  |        value1        |        value2        |
+----+----------+----------------------+----------------------+
| 1  |  other1  | 111,222,333          | 1616,17,1            |
| 2  |  other2  | 55,6,7777            | 21,22,23             |
| 3  |  other3  | 10101,11.11,13       | 242424,2525,26       |
+----+----------+----------------------+----------------------+

EDITED:

我没有提到那些表有大量的元素(以及许多其他列,如“其他”)。因此我更喜欢使用:

create table tableB LIKE tableA; 
INSERT tableB SELECT * FROM tableA; 

然后更新value1和value2(在2个不同的事务中 - 事实上我有91个这样的列)。这可能比单个查询中包含所有值的“创建表”更有效...


EDITED2(解决方案):

SQLFiddle:

http://sqlfiddle.com/#!2/2e73a/1

1 个答案:

答案 0 :(得分:2)

您可以使用MySQL的SUBSTRING_INDEX()功能以及CREATE TABLE ... SELECT

CREATE TABLE TableB
  SELECT id,
         other,
         SUBSTRING_INDEX(value1, ',', 3) AS value1,
         SUBSTRING_INDEX(value2, ',', 3) AS value2
  FROM   TableA

sqlfiddle上查看。