通过从同一个表中的其他列中提取值来填充列

时间:2013-08-28 02:46:13

标签: mysql sql

我有一张表callInfo,它看起来像这样:

+----+------------------------------------------------------------------------------------------------------------------------------------+
| id | idUrl                                                                                                               | collectionId |                                                                                              |
+----+------------------------------------------------------------------------------------------------------------------------------------+
|  1 | id?books.0.levelOfDetail=high&books.0.shopId=727&books.0.type=books&collectionId=20092014&type=seasonPassSource     |          |
|  2 | id:call3?books.0.levelOfDetail=high&books.0.shopId=123&books.0.type=books&collectionId=16645&type=seasonPassSource  |          |
|  3 | id:call3?maxDepth=1&parentMixId=777&type=mixSource                                                                  |          |
|  4 | idSet:call3?keyword=%22FOO%20BAR%20.%5E%24*%2B%3F%7C%28%29%7B%7D%5B%5D%22&type=wishListSource                       |          |
|  5 | idSet:call3?books.0.levelOfDetail=high&books.0.shopId=727                                                           |          |
|  6 | idSetSource.0.booksNumber=2&collectionId=16645&books.0.levelOfDetail=high&books.0.type=books&type=seasonPassSource  |          |
|  7 | idSet:call3?keyword=hero&type=wishListSource                                                                        |          |
+----+-------------------------+----------------------------------------------------------------------------------------------------------+

我在表collectionId中创建了一个名为callInfo的新列,但表中有许多记录需要更新此列值。

我需要从collectionId列中提取idUrl的值,并将其放在collectionId列中。

它看起来应该是这样的

+----+------------------------------------------------------------------------------------------------------------------------------------+
| id | idUrl                                                                                                               | collectionId |                                                                                              |
+----+------------------------------------------------------------------------------------------------------------------------------------+
|  1 | id?books.0.levelOfDetail=high&books.0.shopId=727&books.0.type=books&collectionId=20092014&type=seasonPassSource     | 20092014     |
|  2 | id:call3?books.0.levelOfDetail=high&books.0.shopId=123&books.0.type=books&collectionId=16645&type=seasonPassSource  | 16645        |
|  3 | id:call3?maxDepth=1&parentMixId=777&type=mixSource                                                                  | NULL         |
|  4 | idSet:call3?keyword=%22FOO%20BAR%20.%5E%24*%2B%3F%7C%28%29%7B%7D%5B%5D%22&type=wishListSource                       | NULL         |
|  5 | idSet:call3?books.0.levelOfDetail=high&books.0.shopId=727                                                           | NULL         |
|  6 | idSetSource.0.booksNumber=2&collectionId=16645&books.0.levelOfDetail=high&books.0.type=books&type=seasonPassSource  | 16645        |
|  7 | idSet:call3?keyword=hero&type=wishListSource                                                                        | NULL         |
+----+-------------------------+----------------------------------------------------------------------------------------------------------+

我需要在MySQL中这样做。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

使用SUBSTRING_INDEX()

执行此操作的另一种方法
UPDATE callInfo
   SET collectionId = SUBSTRING_INDEX(SUBSTR(idUrl, INSTR(idUrl, 'collectionId=') + 13), '&', 1)
 WHERE idUrl LIKE '%collectionId=%'

输出:


| ID | ... | COLLECTIONID |
|----| ... |--------------|
|  1 | ... |     20092014 |
|  2 | ... |        16645 |
|  3 | ... |       (null) |
|  4 | ... |       (null) |
|  5 | ... |       (null) |
|  6 | ... |        16645 |
|  7 | ... |       (null) |

这是 SQLFiddle 演示