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