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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:22:34