mysql - 更新包含 ID 的 mySQL 行

标签 mysql sql sql-update

我有一个 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 并保持其余部分不变?

谢谢。

最佳答案

您需要在列中附加破折号以便过滤并在更新后将其删除:

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

参见 demo .
结果:

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

关于mysql - 更新包含 ID 的 mySQL 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57675614/

相关文章:

PHP - 来自动态 POST 的动态 SQL 查询

android - 我发布了一些值并在改造中以数组形式获得响应,但出现错误

mysql - struts 1.x 数据源配置出现错误

mysql - 更新排序索引列以移动项目

mysql - 连接来自同一个表的多个 Sql 语句

java - 如何使用jOOQ RecordUnmapper?

php sql 注入(inject)

MySQL 正则表达式匹配至少 2 个点

mysql - 在mysql字段的每一行中插入文本

sql - 如何使用其他表数据 SQL 更新一列数据