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

如何用单条SQL语句不区分大小写匹配列表值更新单列数据?

单条SQL实现不区分大小写匹配并替换指定值

当然可以!完全能用单条SQL语句搞定这个需求,核心是借助条件判断+大小写统一匹配的逻辑,精准把匹配行替换成你指定的原大小写值,而且不用拆分查询。

通用兼容写法(适用于MySQL、PostgreSQL、SQL Server等)

假设你的表名为single_column_table,目标列名为target_col,可以用CASE语句结合LOWER()(或UPPER())函数实现:

UPDATE single_column_table
SET target_col = CASE
    WHEN LOWER(target_col) = LOWER('aPple') THEN 'aPple'
    WHEN LOWER(target_col) = LOWER('chErry') THEN 'chErry'
    ELSE target_col  -- 不匹配的行保持原有内容不变
END
WHERE LOWER(target_col) IN (LOWER('aPple'), LOWER('chErry'));

代码解释

  • CASE语句:逐一判断每行的值,和列表中的条目做不区分大小写的匹配,匹配成功就替换成你给定的原大小写值(比如把APPLE、apple都替换成aPple)
  • WHERE子句:过滤出需要更新的行,避免全表扫描更新,提升执行效率
  • LOWER()函数:统一把列值和匹配值转成小写,实现不区分大小写的匹配逻辑(用UPPER()转大写效果一样)

数据库专属优化写法(以PostgreSQL为例)

如果用PostgreSQL,还可以用更简洁的ILIKE操作符(原生支持不区分大小写匹配):

UPDATE single_column_table
SET target_col = CASE
    WHEN target_col ILIKE 'aPple' THEN 'aPple'
    WHEN target_col ILIKE 'chErry' THEN 'chErry'
    ELSE target_col
END
WHERE target_col ILIKE ANY (ARRAY['aPple', 'chErry']);

这个写法更直观,不需要手动转大小写,但只适用于支持ILIKE的数据库。

不管用哪种写法,都能满足你“单条SQL、不区分大小写匹配、替换为指定对应值”的全部要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:30:57