2017-07-18 9 views
0

SQLテーブルの値をユーザーが検索しようとしていて、その値を含む行がユーザーに返されます。現時点では、私はそれがコードがあるように動作させることができます。PostgreSQL:変数のような任意の列の値を返します

SELECT * FROM table WHERE lower('foo') in (lower('col1'),lower('col2'),etc) 

しかし、私はすべての列を検索すると「foo」でLIKE任意の行を返すことができるようにしたいと思います。たとえば、

SELECT * FROM table WHERE (lower('col1'), lower('col2'), etc) like lower('%foo%') 

しかし、これは機能しません。

提案がありますか?

答えて

0

1つのステートメントにすべてをグループ化するのではなく、複数のWHERE句を使用する必要があると思います。これを試してみてください:

SELECT * FROM table 
WHERE lower(col1) like lower('%foo%') 
OR lower(col2) like lower('%foo%') 
OR etc like lower('%foo%') 
+0

引用符を使わないで 'lower(col1)... lower(coln)'を使うべきでしょう。そうでなければ、リテラルテキストだけをリテラルテキスト比較にします。 – joanolo

+1

@joanoloありがとうございました。もちろん、これらは実際の列のプレースホルダ名であると確信しています。 –

0

あなたは文字列に行全体を変換し、その結果にLIKEを使用することができます。

select * 
from the_table 
where lower(the_table::text) like '%foo%'; 

the_table::textで囲まれたカンマ区切りリストとして戻り、各行のすべての列をかっこ、例えば(42,Arthur,Dent)。したがって、上記の列は、各列に適用されるLIKE条件と100とは同じではありませんが、おそらくあなたが望むものを実行します。

関連する問題