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

Snowflake中regexp_instr失效,求无需该函数的CASE语句实现方案

无需regexp_instr实现指定字段赋值逻辑

需求说明

当Col1满足以下所有条件时,Col2赋值为ENTERPRISE,否则赋值为NON_ENTERPRISE:

  • 非空(不为NULL且不是空/空白字符串)
  • 包含"SALES"(不区分大小写)
  • 不包含"SALES_INTERNAL"(不区分大小写)

原代码问题

你提供的使用regexp_instr的CASE语句存在逻辑错误,导致无法覆盖所有场景:

CASE 
    WHEN nvl (TABLE."Col1",'NA') <> '' THEN
  CASE
    WHEN regexp_instr (UPPER (TABLE."Col1"), 'SALES') = '0' THEN 'ENTERPRISE' 
    WHEN regexp_instr (UPPER (TABLE."Col1"), 'SALES_INTERNAL') <> '0' THEN 'ENTERPRISE' 
ELSE 'NON_ENTERPRISE'
  END
END AS Col2

比如原代码中,当Col1不包含"SALES"时反而返回ENTERPRISE,这和需求完全相悖,且嵌套CASE的写法也容易导致逻辑混乱。

无需regexp_instr的实现方案

可以用LIKE操作符结合UPPER、NVL、TRIM来实现,逻辑更清晰且不需要正则函数:

CASE
    -- 同时满足三个核心条件
    WHEN TRIM(NVL(TABLE."Col1", '')) <> ''
         AND UPPER(TABLE."Col1") LIKE '%SALES%'
         AND UPPER(TABLE."Col1") NOT LIKE '%SALES_INTERNAL%'
    THEN 'ENTERPRISE'
    -- 其他所有情况统一返回NON_ENTERPRISE
    ELSE 'NON_ENTERPRISE'
END AS Col2

逻辑解释

  • TRIM(NVL(TABLE."Col1", '')) <> '':先把NULL转为空字符串,再去掉首尾空格,确保Col1不是NULL、空字符串或全空格的无效值
  • UPPER(TABLE."Col1") LIKE '%SALES%':统一转为大写后,匹配任意位置包含"SALES"的内容,实现不区分大小写的包含判断
  • UPPER(TABLE."Col1") NOT LIKE '%SALES_INTERNAL%':确保内容中不包含"SALES_INTERNAL",同样不区分大小写

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:45:19