我试图让用户在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%')
但这并不奏效。
有什么建议吗?
答案 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条件完全相同 - 但可能会做你想要的。