我需要读取用户传递的字符串,然后修改字符串以获得所需的格式并将其作为 where 条件传递给视图。
示例 用户输入以逗号“12345,78990,456789”分隔的材料编号列表。这个字符串必须修改为
MATCH("BOM_PATH",'12345') OR MATCH("BOM_PATH",'78990') OR MATCH("BOM_PATH",'456789 ')
所以基本上我需要将所有材料从输入字符串中分离出来,并在一个名为 BOM_PATH 的字段中搜索这些单独的材料,该字段的值类似于 '12345:098765:784526'
我尝试使用 Snowflake SQL UDTF,但它不支持变量或多个 SQL 语句,并且 Snowflake 视图不支持参数。
所以请建议我如何在 Snowflake 中实现这一点。
答案 0 :(得分:0)
您可以使用 ARRAY_CONTAINS() 函数将输入转换为 STRTOK_TO_ARRAY() 数组。
create or replace table bom_table(BOM_PATH varchar);
insert into bom_table (BOM_PATH)
values
('12345'),
('55555'),
('77778'),
('78990');
select * from bom_table
where
ARRAY_CONTAINS(BOM_PATH::variant,STRTOK_TO_ARRAY('12345,78990,456789',','));
或者,如果您的 BAM_PACH 也是一个分隔列表 - 使用 ARRAY_INTERSECTION() 和 ARRAYS_OVERLAP()
insert into bom_table (BOM_PATH)
values
('12345:098765:784526'),
('12346:098766:784527'),
('12345:098765:777777'),
('12399:098765:777773');
select ARRAY_INTERSECTION(STRTOK_TO_ARRAY(BOM_PATH,':'),STRTOK_TO_ARRAY('12345,78990,456789',',')) from bom_table
where ARRAYS_OVERLAP(STRTOK_TO_ARRAY(BOM_PATH,':'),STRTOK_TO_ARRAY('12345,78990,456789',','));