是否可以使用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
答案 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)
可以使用有用的函数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