2016-08-21 1 views
3

Ich übergebe eine Zeichenfolge als param (via massivjs) in meine Abfrage. Die Zeichenfolge ist wie folgt formatiert: param = 'red, blue, green'. Der Parameter selbst hat keine feste Länge (',' ist das Trennzeichen), da er durch das, was der Benutzer sendet, ausgefüllt ist (aber bei 10 Elementen maximal ist).Wie man einen String multipliziert (WHERE IN Abfrage)

Wie würde ich die Zeichenfolge in einzelne Strings in meiner Abfrage zerlegen?

Beispiel von dem, was ich zu tun versucht:

SELECT * FROM table 
WHERE name IN (param); 

Ich weiß, dass dies funktioniert, ist aber sehr sehr grob:

SELECT * FROM table 
WHERE name IN (split_part(param, ',', 1), split_part(param, ',', 2) .......)) -- keep going. 

Im Wesentlichen habe ich will (‚rot‘, ‚blau‘ , 'grün' ....) innerhalb der IN-Klammer. Gibt es einen schöneren Weg, dies zu erreichen?

Antwort

1

Sie könnten die string_to_array Funktion verwenden, um die Zeichenfolge in ein Array aufteilen und dann verwenden, um die any Funktion zu überprüfen, ob Ihr Element darin enthalten ist:

SELECT * 
FROM mytable 
WHERE name = ANY(STRING_TO_ARRAY(param, ',')); 
+1

funktioniert perfekt Dank! Eine schnelle Folge: Wie würde ich das ändern, um mit ganzen Zahlen umzugehen? Das ist, wenn die Tabelle ganze Zahlen hatte. Ist hier sowas wie Nummer anwendbar? – Suman

+1

@SumanBhattarai In einem solchen Fall würde ich die Spalte in eine Zeichenfolge umwandeln, also vergleicht man Äpfel mit Äpfeln. AFAIK, Postgres hat keine praktische Möglichkeit, eine Funktion auf alle Elemente in einem Array anzuwenden. – Mureinik

Verwandte Themen