PostgreSQL:返回任何列值如变量的行

时间:2017-07-18 21:21:26

标签: sql postgresql

我试图让用户在SQL表中搜索一个值,并返回包含该值的任何行的用户。目前,我可以使其工作,使代码是:

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

但是,我希望它能够搜索每一列并返回任何行LIKE' foo'。例如,

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

但这并不奏效。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我相信您需要使用多个WHERE子句,而不是将它们全部分组到一个语句中。试试这个:

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

答案 1 :(得分:0)

您可以将整行转换为字符串,然后对结果使用LIKE:

hadoop = sc._jvm.org.apache.hadoop

fs = hadoop.fs.FileSystem
conf = hadoop.conf.Configuration() 
path = hadoop.fs.Path('/hivewarehouse/disc_mrt.db/unified_fact/')

for f in fs.get(conf).listStatus(path):
    print f.getPath()

select * from the_table where lower(the_table::text) like '%foo%'; 将每行的所有列作为用括号括起来的逗号分隔列表返回,例如the_table::text。所以上面的内容并不是100与每列应用的LIKE条件完全相同 - 但可能会做你想要的。