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

Oracle中如何根据指定列的条件修改多列值?

解决SQL中根据条件修改多列值的问题

你的写法错误在于试图用单个CASE表达式同时处理多个列——SQL里每个CASE只能对应单个列的逻辑,不能一次返回多列结果。下面分两种常见场景给出正确写法:

场景1:查询时动态修改列值(不修改表数据)

给每个需要修改的列单独编写CASE判断:

SELECT
    CASE WHEN my_key_col LIKE '%mystring%' THEN NULL ELSE col_1 END AS col_1,
    CASE WHEN my_key_col LIKE '%mystring%' THEN NULL ELSE col_2 END AS col_2
FROM your_table;

每个列独立判断条件:当my_key_col包含指定文本时,返回NULL,否则保留原列值。

场景2:更新表中实际存储的数据

如果要永久修改表内数据,优先用UPDATE语句,有两种写法:

写法一(仅修改符合条件的行,高效)

直接通过WHERE定位目标行,批量设置列值:

UPDATE your_table
SET col_1 = NULL, col_2 = NULL
WHERE my_key_col LIKE '%mystring%';

这种方式只对符合条件的行生效,其他行的col_1和col_2保持不变。

写法二(对所有行做条件处理)

如果需要对所有行都执行逻辑判断(比如不符合条件时要设置其他值),给每个列单独加CASE:

UPDATE your_table
SET 
    col_1 = CASE WHEN my_key_col LIKE '%mystring%' THEN NULL ELSE col_1 END,
    col_2 = CASE WHEN my_key_col LIKE '%mystring%' THEN NULL ELSE col_2 END;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:02:01