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
相关产品推荐
相关产品推荐

