【问题标题】:Get the substring value of a table with delimiter count获取带有分隔符计数的表的子字符串值
【发布时间】:2012-10-10 15:51:45
【问题描述】:

我有一个包含 2 列(value1、value2)的 tableA 和一个 CSV 格式的值。我想创建一个与 tableA 具有相同字段的 tableB,但是在这 2 列中,只有有限数量的值(请注意,我不知道逗号之间存在多少个字符)。这个“限制”是 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       |
+----+----------+----------------------+----------------------+

已编辑:

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

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

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


EDITED2(解决方案):

SQLFiddle:

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

【问题讨论】:

    标签: mysql csv substring


    【解决方案1】:

    您可以使用 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 上查看。

    【讨论】:

    • 有没有办法将 CSV 视为表格,然后再次选择要使用的列数作为 group_concat?我知道你的答案正是我所需要的(对此我很感激!).. 只是想知道......
    • @kairos:那么就按照你的建议去做吧……CREATE TABLE,然后是UPDATE
    • @kairos: UPDATE TableB SET value1 = SUBSTRING_INDEX(value1, ',', 3), value2 = SUBSTRING_INDEX(value2, ',', 3);
    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 2021-11-28
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    相关资源
    最近更新 更多