如何通过Spotfire手动输入参数传递多值API12过滤Redshift数据?
问题
使用Spotfire结合Amazon Redshift自定义查询时,需要实现一个可一次性粘贴多个逗号分隔的12位API编号的提示框,仅保留对应油井的查询结果,但当前提示框仅支持单次输入一个值。尝试将提示类型改为手动输入,并使用LIKE结合字符串拼接的方式,未返回任何数据,SQL代码如下:
-- Spotfire Custom Query WHERE clause WHERE ',' || '${facility_api12}' || ',' LIKE '%,' || ob.facility_api12 || ',%' -- 在提示框输入"420000000010,420000000014"无数据返回
请问如何将Spotfire手动输入提示中的多值逗号分隔值传入Redshift SQL的WHERE子句?
解决方案
你的写法逻辑搞反了,应该让ob.facility_api12匹配输入的逗号分隔列表,而非反过来。以下是两种可行的实现方法:
方法1:使用Redshift字符串拆分函数STRING_SPLIT
Redshift支持STRING_SPLIT函数(需集群版本满足要求),可直接将输入的逗号分隔字符串拆分成行,再通过IN子句匹配:
WHERE ob.facility_api12 IN ( SELECT value FROM STRING_SPLIT('${facility_api12}', ',') )
输入时直接填写纯逗号分隔的API编号即可,无需添加引号,比如:420000000010,420000000014。
方法2:修正正则匹配逻辑
如果不想使用拆分函数,可调整之前的匹配逻辑,通过正则表达式实现精确匹配:
WHERE ob.facility_api12 ~* ('^(' || REPLACE('${facility_api12}', ',', '|') || ')$')
这个写法会把输入的逗号替换成正则的“或”运算符|,然后精确匹配每个API编号。~*表示不区分大小写(API编号为数字时无影响)。
注意事项
- 确保Spotfire提示框输入的是纯逗号分隔的数字,不要添加额外空格或引号
- 如果输入的API编号可能包含空格,可在拆分后用
TRIM处理,或在正则中加入空格清理逻辑
内容的提问来源于stack exchange,提问作者Hansel Jade
相关产品推荐
相关产品推荐

