我正在尝试在AWS Redshift SQL中编写存储过程,而我的参数之一需要具有整数列表的可能性(将在WHERE子句中使用'IN(0,100,200,...)')。我如何将输入参数写入过程的标题中,以便有可能(如果有的话)
我尝试将它们作为VARCHAR“整数列表”类型的东西传递,但不确定如何将其解析回int。
更新:我找到了一种使用SPLIT_PART函数解析字符串并循环遍历并将所有这些字符串存储到表中的方法。然后只需将SELECT * FROM表与IN()调用一起使用
答案 0 :(得分:0)
我最终要做的事情如下。我将期望的整数作为逗号分隔的字符串。然后,我对其进行了以下操作。
CREATE OR REPLACE PROCEDURE test_string_to_int(VARCHAR)
AS $$
DECLARE
split_me ALIAS FOR $1;
loop_var INT;
BEGIN
DROP TABLE IF EXISTS int_list;
CREATE TEMPORARY TABLE int_list (
integer_to_store INT
);
FOR loop_var IN 1..(REGEXP_COUNT(split_me,',') + 1) LOOP
INSERT INTO int_list VALUES (CAST(SPLIT_PART(split_me,',',loop_var) AS INT));
END LOOP;
END;
$$ LANGUAGE plpgsql;
所以我会用类似这样的程序来调用该过程:
CALL test_string_to_int('1,2,3');
并可以对其执行选择语句以查看存储在表中的所有值。然后在查询中需要运行此参数:
.........................
WHERE num_items IN(SELECT integer_to_store FROM int_list);