如何根据每一行的另一列的值将值插入一列?

How to insert values into one column based on values of another column for each row?

# table schema
CREATE TABLE `ref_str` (
  `ref_id` int(11) DEFAULT NULL,
  `ref_str` varchar(4096) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

这是当前数据:

+--------+--------------------+
| ref_id | ref_str            |
+--------+--------------------+
|   NULL | [5] www.NCCN.com   |
|   NULL | [4] www.nhc.gov.cn |
|   NULL | [14] www.hc.gov.cn |
|   NULL | [146] someh.gov.cn |
+--------+--------------------+

我想将同一行 ref_str[] 内的 int 值迭代地插入到 ref_id 列中。

结果应如下所示:

+--------+--------------------+
| ref_id | ref_str            |
+--------+--------------------+
|    5   | [5] www.NCCN.com   |
|    4   | [4] www.nhc.gov.cn |
|   14   | [14] www.hc.gov.cn |
|  146   | [146] someh.gov.cn |
+--------+--------------------+

我正在使用 MySQL 5.7.32.

谢谢。

UPDATE ref_str
SET ref_id = 0 + TRIM(LEADING '[' FROM ref_str);

fiddle

首先我们删除前导括号。然后我们将值隐式转换为数字 - 非数字尾部被简单地切断。

你可以在这里使用SUBSTRING_INDEX,例如:

SELECT
    SUBSTRING(SUBSTRING_INDEX(ref_str, ']', 1), 2) AS ref_id,
    ref_str
FROM ref_str;

Demo