2016-08-21 7 views
3

paramとして文字列を(massivejs経由で)クエリに渡しています。文字列のフォーマットはparam = 'red, blue, green'です。 param自体は固定長( '、'はデリミタ)ではありません。ユーザーが送信したものが(10個の要素で最大になります)入力されるためです。文字列を複数に分割する方法(WHERE INクエリ)

クエリ内で文字列を個々の文字列に分割するにはどうすればよいですか?私がやろうとしています何の

例:

SELECT * FROM table 
WHERE name IN (param); 

私はこの作品を知っているが、非常に非常に、粗である:

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

基本的に私は「青」、(「赤」を持つようにしたいです、 'green' ....)をIN括弧内に入れます。これを達成するためのより良い方法がありますか?あなたの要素が含まれている場合

答えて

1

は、あなたはそれにチェックするために、配列に文字列を分割して、any機能を使用するためにstring_to_array機能を使用することができます。

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

作品完璧に感謝!迅速なフォローアップ:整数を扱うためにこれを微調整するにはどうすればよいですか?つまり、テーブルに整数がある場合です。ここにto_numberのようなものがありますか? – Suman

+1

@SumanBhattaraiこのような場合は、列を文字列にキャストして、リンゴとリンゴを比較しています。 AFAIK、Postgresは、配列内のすべての要素に関数を適用する便利な方法はありません。 – Mureinik

関連する問題