SQL - IN运算符获取位置

时间:2016-08-25 09:32:00

标签: sql postgresql

是否可以使用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 个答案:

答案 0 :(得分:5)

你不能用"普通" IN子句,但您可以使用数组和不需要的函数执行此操作:

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;

但是,如果要搜索的值不在数组中,则根本不会显示任何行。

答案 1 :(得分:3)

postgres中的

可以使用有用的函数POSITION,返回string中的第一个索引 例如:

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

答案 2 :(得分:1)

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

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

select CHARINDEX(','+@searchkey+',',' ,'+ @string+',')-1