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

如何在Oracle SQL的CASE WHEN语句中排除以BAR开头的VALUE值?

Oracle SQL:排除以特定前缀开头的记录

原查询语句

SELECT DISTINCT
    A,
    CASE
        WHEN Parameter = 'ID' AND REGEXP_LIKE(VALUE, 'FOO')
            THEN VALUE
            ELSE 'NA'
    END AS test
FROM my_table;

原表数据

Aparametervalue
xIDFOO1223
yIDFOO5462
zIDempy
pIDBAR5432

当前结果

Atest
xFOO1223
yFOO5462
zNA
pNA

需求

需要排除VALUE以BAR开头的记录,得到如下期望结果:

Atest
xFOO1223
yFOO5462
zNA

解决方案

要直接排除目标记录,最高效的方式是在WHERE子句中添加过滤条件。针对前缀匹配,使用LIKE比正则表达式性能更优:

SELECT DISTINCT
    A,
    CASE
        WHEN Parameter = 'ID' AND REGEXP_LIKE(VALUE, 'FOO')
            THEN VALUE
            ELSE 'NA'
    END AS test
FROM my_table
WHERE VALUE NOT LIKE 'BAR%'; -- 过滤掉以BAR开头的行

如果你偏好使用正则表达式,也可以写成:

SELECT DISTINCT
    A,
    CASE
        WHEN Parameter = 'ID' AND REGEXP_LIKE(VALUE, 'FOO')
            THEN VALUE
            ELSE 'NA'
    END AS test
FROM my_table
WHERE NOT REGEXP_LIKE(VALUE, '^BAR'); -- ^表示匹配字符串开头

两种写法都能得到你想要的结果,优先推荐LIKE写法,因为它在处理前缀匹配时的执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:30:41