mysql - 从 SET 字段中删除值的最佳方法?

标签 mysql sql sql-update

更新 mysql SET 字段的最佳方法是从字段中删除特定值。

例如。具有以下值的字段类别:1、2、3、4、5? 我想从列表中删除“2”:

UPDATE table 
SET categories = REPLACE(categories, ',2,', ',') 
WHERE field LIKE '%,2,%';

但是如果“2”是列表中的第一个或最后一个值呢?

UPDATE table 
SET categories = REPLACE(categories, '2,', '') 
WHERE field LIKE '2,%';

UPDATE table 
SET categories = REPLACE(categories, ',2', '') 
WHERE field LIKE ',2%';

如何用一个查询处理所有 3 种情况?!

最佳答案

如果您需要从集合中删除的值不能多次出现,您可以使用这个:

UPDATE yourtable
SET
  categories =
    TRIM(BOTH ',' FROM REPLACE(CONCAT(',', categories, ','), ',2,', ','))
WHERE
  FIND_IN_SET('2', categories)

看到它工作here .如果该值可以多次出现,这将删除它的所有出现:

UPDATE yourtable
SET
  categories =
    TRIM(BOTH ',' FROM
      REPLACE(
        REPLACE(CONCAT(',',REPLACE(col, ',', ',,'), ','),',2,', ''), ',,', ',')
    )
WHERE
  FIND_IN_SET('2', categories)

关于mysql - 从 SET 字段中删除值的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14642658/

相关文章:

mysql - MySQL 中的游标

php - 如果变量不为空,则更新几列

SQL 查询,根据连接表中的最后一个值进行过滤

java - 仅当值大于当前值时才更新字段的 SQL 语句

postgresql - sequelize 更新事务锁行

mysql - 更新mysql大表挂太时间

mySQL 分区多文件与单文件性能?

sql - SQL 中的 ORDER BY,其中列是带有嵌入整数的合成字符串

sql - SQL在字段中的位置获取字符

mysql - 更新当前时间与同一个表中的记录之间的时间差的列