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

Snowflake环境下SQL剔除含'test'但保留'contest'数据的方法

Snowflake SQL 正确筛选营销活动数据方案

需求逻辑:剔除所有名称包含'test'(大小写不敏感)的营销活动,但保留名称含'contest'的活动,同时保留既不含'test'也不含'contest'的活动。原写法NAME ILIKE ANY('%_test_%', '%_test%', 'test_%', 'test')会误删含'contest'的数据,因为contest中的test会被错误匹配。

方案一:逻辑组合判断

通过明确的逻辑分支筛选符合条件的数据:

SELECT Name
FROM your_table_name
WHERE 
    -- 保留含'contest'的记录
    REGEXP_LIKE(Name, 'contest', 'i')
    OR
    -- 保留既不含'test'也不含'contest'的记录
    NOT REGEXP_LIKE(Name, 'test', 'i');

方案二:正则负向预查精准匹配

使用正则负向预查仅匹配独立的'test'(排除'contest'中的'test'),再剔除这些记录:

SELECT Name
FROM your_table_name
WHERE 
    NOT REGEXP_LIKE(Name, '(?<!con)test', 'i');

关键说明

  • REGEXP_LIKE的第三个参数'i'表示大小写不敏感匹配,覆盖TEST、Test等所有大小写组合;
  • 方案二中的(?<!con)是负向预查规则,意思是匹配'test'时其前面不能是'con',彻底避免误识别'contest'中的'test';
  • 两种方案均可满足需求,可根据个人习惯选择。

示例验证

针对给定的示例数据:

| Name |
|AuroraEnterprisesInc_AuroraSepTestCampaign |
|TEST |
|test |
|001_test_XP_GutterDoctor_June-OctoberCampaign|
|FR_TEST
|
|002_XP_HunterKnifton_21ElectionContestCampaign|
|001_XP_Kijiji_BuyandSell |

执行上述SQL后,将得到预期结果:

| Name |
|002_XP_HunterKnifton_21ElectionContestCampaign|
|001_XP_Kijiji_BuyandSell |

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:20:31