You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL更新字段时自动判断空值、逗号追加内容且避免重复的实现方法

单UPDATE语句实现字段追加+去重方案

以下针对不同主流数据库给出实现,所有逻辑均封装在UPDATE语句内,无需额外前置查询。

MySQL 版本(最常用)

核心用FIND_IN_SET函数判断值是否已存在,匹配需求场景的语句示例:

UPDATE users
SET genders = CASE
    WHEN genders IS NULL OR genders = '' THEN 'female'
    WHEN FIND_IN_SET('female', genders) = 0 THEN CONCAT(genders, ',', 'female')
    ELSE genders
END
WHERE id = 1;

逻辑说明

  • 场景1:目标行genders为空,命中第一个分支,直接写入新值,结果为female
  • 场景2:目标行genders为male,FIND_IN_SET返回0说明female不存在,命中第二个分支拼接,结果为male,female
  • 场景3:目标行genders已包含female,命中ELSE分支保持原值不变,不会生成重复值

注意事项

  • 替换语句中的female为你实际要追加的新值
  • 替换WHERE id = 1为你实际的行筛选条件
  • 如果你的业务中空值仅为NULL,没有空字符串的情况,可以删除OR genders = ''的判断

PostgreSQL 版本

用正则匹配避免部分值误判,语句示例:

UPDATE users
SET genders = CASE
    WHEN genders IS NULL OR genders = '' THEN 'female'
    WHEN genders !~ CONCAT('(^|,)', 'female', '(,|$)') THEN CONCAT(genders, ',', 'female')
    ELSE genders
END
WHERE id = 1;

SQL Server 版本

用CHARINDEX加前后补逗号的方式判断值是否存在,语句示例:

UPDATE users
SET genders = CASE
    WHEN genders IS NULL OR genders = '' THEN 'female'
    WHEN CHARINDEX(',' + 'female' + ',', ',' + genders + ',') = 0 THEN CONCAT(genders, ',', 'female')
    ELSE genders
END
WHERE id = 1;

内容的提问来源于stack exchange,提问作者Relaxing Music

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:45:06