2016-08-25 2 views
2

Возможно ли получить позицию (индекс) первого аргумента списка аргументов с оператором как IN?SQL-IN Operator get Position

В результате я ищу что-то в следующем:

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 п»В статье, но вы можете сделать это с массивом и 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

Смежные вопросы