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

Snowflake中REGEXP_LIKE正则表达式匹配失效问题求助

排查Snowflake中REGEXP_LIKE匹配返回NULL的问题

首先,你的SQL存在语法错误,CTE(公共表表达式)的定义格式不正确,修正后的正确写法应为:

WITH HAB AS (
  SELECT 
       'HAB' AS NAME,
       CASE 
           WHEN REGEXP_LIKE(LIST_TXT, '(^|,)201(,|$)') THEN 'YES' 
       END AS MC_NM
  FROM TABLE1
)
SELECT * FROM HAB;

针对LIST_TXT包含201但MC_NM仍为NULL的问题,按以下步骤排查:

  • 检查LIST_TXT的实际内容
    运行SELECT LIST_TXT FROM TABLE1 WHERE LIST_TXT LIKE '%201%',查看返回的具体值:

    • 如果值包含空格(比如, 201,或201 ),你的正则表达式不会匹配——因为(^|,)201(,|$)要求201前后是逗号或字符串首尾,未考虑空格。此时可修改正则为'(^|,)\\s*201\\s*(,|$)',或先对字段去空格:REGEXP_LIKE(TRIM(LIST_TXT), '(^|,)201(,|$)')
    • 如果值是2010或a201b这类包含201的子串,你的正则会排除这类情况(因为要求201是独立项),若需匹配这类场景,调整正则为'.*201.*'
  • 验证正则在Snowflake中的行为
    直接测试正则的匹配结果,确认逻辑是否符合预期:

    SELECT 
      REGEXP_LIKE('201', '(^|,)201(,|$)') AS test1,
      REGEXP_LIKE(',201', '(^|,)201(,|$)') AS test2,
      REGEXP_LIKE('201,', '(^|,)201(,|$)') AS test3,
      REGEXP_LIKE(',201,', '(^|,)201(,|$)') AS test4,
      REGEXP_LIKE(', 201,', '(^|,)201(,|$)') AS test5;
    

    前四个应返回TRUE,第五个返回FALSE,若结果不符,说明正则需要调整。

  • 确认LIST_TXT的数据类型
    确保LIST_TXT是字符串类型(VARCHAR/STRING),如果是数字等其他类型,需先转换为字符串:REGEXP_LIKE(TO_VARCHAR(LIST_TXT), '(^|,)201(,|$)')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:42:44