我正在编写存储过程,我需要检查整数变量值是否在列表中。
我试过这个
If (var_int1 in (4,6,9) ) then ....
这项工作,但数字列表将从varchar字段返回给我,所以有没有办法仍然使用IN
而不使用临时表。
答案 0 :(得分:3)
您可以使用内置函数position:
if(position(val IN valList) > 0)then
请注意,您需要避免误报,其中只有部分数字匹配,即,'123,456,789'
的值'2'
位置将返回true,您可能不需要。为了避免这种情况,你可以添加逗号(因为在varchar字段中有逗号分隔值)作为搜索字符串的前缀和后缀,即
val = ',' || cast(var_int1 as varchar(10)) || ',';
valList = ',' || valList || ',';
if(position(val IN valList) > 0)then ...
答案 1 :(得分:0)
只是提供另一种可能的解决方案:
valList = '2,3,4'; --- varchar
val = 3; --- integer
if ( valList like '%'||val||'%' ) then ...