4

我正在编写一个存储过程,我需要检查一个整数变量值是否在列表中。

我试过这样

If (var_int1 in (4,6,9) ) then ....

这项工作,但数字列表将从 varchar 字段返回给我,所以有没有办法仍然使用IN而不使用临时表。

4

2 回答 2

3

您可以使用内置函数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 ...
于 2013-09-08T12:14:53.077 回答
0

只是为了提供另一种可能的解决方案:

valList = '2,3,4';  --- varchar
val = 3;  --- integer

if ( valList like '%'||val||'%' ) then ...
于 2013-09-08T16:11:08.200 回答