2016-08-25 3 views
2

Ist es möglich, die Position (Index) des ersten Arguments einer Liste von Argumenten mit einem Operator als IN zu erhalten?SQL - IN Operator get Position

Das Ergebnis ich suche ist etwas, als nächstes:

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

Die Antwort ist NEIN. – jarlh

+1

Warum genau brauchst du das? Dies ist eine ungerade Anfrage. –

+0

IN ist kein Indexoperator, den Sie auswählen, ob ein Wert in einer Liste ist oder nicht. – Linkan

Antwort

5

Sie können dies nicht mit einem „plai n“IN-Klausel, aber Sie können dies tun, mit einem Array und der UNNEST Funktion:

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; 

Wenn jedoch der Wert für die Suche ist nicht im Array, werden Sie keine Zeilen überhaupt bekommen.

3

in Postgres kann nützliche Funktion POSITION, kehrt ersten Index in String Beispiel:

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

Und wenn 22 als erstes Element zur Liste hinzugefügt wird? – jarlh

1

In SQL Server können Sie verwenden CHARINDEX ..

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

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

Und wenn 22 als erstes Element zur Liste hinzugefügt wird? – jarlh