首页 > 解决方案 > 更新包含 ID 的 mySQL 行

问题描述

我有一个 mySQL 表,read_by其中有一列包含以下行:

-17-6
-11-8-6-62
-6
-6-22-45
-16-77
-31-3-6-24

这些是用户的 ID,每个 ID 都以破折号开头-

现在我已将用户 6 更改为 136

如何更新每一行,只需将 6 更改为 136,记住可能有 -16、-62、-167 等 ID,并且 ID 6 位于不同的位置。

以下是 WHERE 条件:

WHERE read_by = "-6"
WHERE read_by LIKE "%-6"
WHERE read_by LIKE "-6-%"
WHERE read_by LIKE "%-6-%"



UPDATE messages SET [...] WHERE ...

如何更改确切的 6 并保持其余部分不变?

谢谢。

标签: mysqlsqlsql-update

解决方案


您需要在列中附加一个破折号,以便在更新后过滤和删除它:

update messages 
set read_by = trim(trailing '-' from replace(concat(read_by, '-'), '-6-', '-136-'))
where concat(read_by, '-') like '%-6-%'

请参阅演示
结果:

> | read_by      |
> | :----------- |
> | -17-136      |
> | -11-8-136-62 |
> | -136         |
> | -136-22-45   |
> | -16-77       |
> | -31-3-136-24 |

推荐阅读