2016-08-25 53 views
2

是否可以使用运算符获取参数列表的第一个参数的位置(索引)为INSQL-IN运算符获取位置

我在寻找的结果是什么为下一个:

SELECT 2 IN(2, 3, 1); -- Result I want is 0 but with IN is true 
SELECT 3 IN(2, 3, 1); -- Result I want is 1 but with IN is true 
SELECT 0 IN(2, 3, 1); -- Result I want is -1 but with IN is false 
SELECT 1 IN(1, 1, 3); -- RESULT I WANT IS 0 ,1 but with IN is true 
+3

答案是否定的。 – jarlh

+1

为什么你需要这个。这是一个奇怪的请求 –

+0

IN不是您选择的索引运算符或不是列表中的值。 – Linkan

回答

5

你不能用“plai N” IN子句,但是你可以用一个阵列和UNNEST功能做到这一点:

select t.idx 
from unnest(array[2,3,1]) with ordinality t(v,idx) 
where t.v = 2; 

select t.idx 
from unnest(array[1, 1, 3]) with ordinality t(v,idx) 
where t.v = 1; 

但是,如果要搜索的值是不是数组中,你会得到没有行的。

3

Postgres里可以实用的功能POSITION,返回第一个索引字符串 例如:

select position('2' in '2,3,1,2') // return 1 
+1

如果22作为第一项添加到列表中? – jarlh

1

在SQL Server中,你可以使用CHARINDEX ..

DECLARE @string VARCHAR(10)='22,3,1,2' 
DECLARE @searchkey VARCHAR(10)='2' 

select CHARINDEX(','[email protected]+',',' ,'+ @string+',')-1 
+0

如果22作为第一项添加到列表中? – jarlh