Snowflake SQL UDF如何实现支持*通配符的动态WHERE IN子句
解决方案
你不需要用CASE语句,直接通过OR逻辑组合两种判断条件即可实现需求,改写后的WHERE子句如下:
WHERE function_input = '*' OR X IN (SELECT VALUE FROM TABLE(SPLIT_TO_TABLE(function_input, ',')))
- 当传入的
function_input值为*时,第一个判断条件成立,WHERE子句整体返回真,所有行都会被保留,实现了不过滤的效果 - 当传入的
function_input为逗号分隔的枚举值时,第一个判断条件不成立,会执行第二个IN逻辑,按拆分后的取值匹配X字段,和你原有逻辑一致
额外说明
- 这个写法逻辑简洁,Snowflake的查询优化器可以正确识别短路逻辑,不会出现多余的计算消耗,性能和你原有写法基本一致
- 如果需要兼容
function_input为NULL的场景,可以根据业务需求调整第一个判断条件,比如改为COALESCE(function_input, '*') = '*',即NULL时也默认返回所有数据
内容的提问来源于stack exchange,提问作者jvels
相关产品推荐
相关产品推荐

