Snowflake SQL UDF字符串处理:为条目加前后%适配LIKE ANY
Snowflake SQL UDF 字符串处理方案
直接利用Snowflake内置的字符串与数组函数,在UDF体内完成需求处理,无需辅助函数,代码简洁易读:
核心实现代码
CREATE OR REPLACE FUNCTION my_func(arg1 VARCHAR, pattern_str VARCHAR, arg3 VARCHAR) RETURNS TABLE(col VARCHAR) LANGUAGE SQL AS $$ SELECT col FROM your_table -- 替换为实际业务表名 WHERE col LIKE ANY( ARRAY_TRANSFORM( -- 统一分隔符并拆分字符串为数组 SPLIT( REGEXP_REPLACE(TRIM(pattern_str, ''''), ',\s+', ', '), ', ' ), -- 为每个元素添加前后%通配符 x -> '%' || x || '%' ) ) -- 可添加arg1、arg3相关的过滤逻辑,例如: -- AND your_column = arg1 -- AND another_column = arg3 $$;
步骤说明
- 移除首尾单引号:
TRIM(pattern_str, '''')去掉输入字符串首尾的单引号(SQL中单引号需用两个单引号转义)。 - 统一分隔符:
REGEXP_REPLACE(..., ',\s+', ', ')将任意逗号加空格(包括多个空格)的分隔格式统一为,,避免因空格数量不一致导致拆分错误。 - 拆分字符串为数组:
SPLIT(..., ', ')把处理后的字符串按,分割成元素数组。 - 添加通配符:
ARRAY_TRANSFORM(..., x -> '%' || x || '%')遍历数组每个元素,为其前后添加%,生成符合LIKE ANY要求的匹配数组。 - LIKE ANY匹配:直接使用处理后的数组作为
LIKE ANY的参数,实现多模式模糊匹配。
简化版(无正则处理)
如果能确保输入的分隔符严格是, ,可以去掉正则替换步骤,进一步简化:
CREATE OR REPLACE FUNCTION my_func(arg1 VARCHAR, pattern_str VARCHAR, arg3 VARCHAR) RETURNS TABLE(col VARCHAR) LANGUAGE SQL AS $$ SELECT col FROM your_table WHERE col LIKE ANY( ARRAY_TRANSFORM( SPLIT(TRIM(pattern_str, ''''), ', '), x -> '%' || x || '%' ) ) -- 结合arg1、arg3的业务逻辑 $$;
内容的提问来源于stack exchange,提问作者En_JK7
相关产品推荐
相关产品推荐

