使用多个LIKE运算符编写Hive查询的正确方法是什么:
SELECT *
FROM some_table
WHERE
some_col LIKE '%abc%'
OR
some_col LIKE '%xyz%'
OR
some_col LIKE '%pqr%'
OR
... (some more LIKE statements)
我尝试过以上以及
WHERE some_col LIKE '%abc|pqr|xyz%'
但他们没有返回任何结果。如果我编写单独的查询,即
,它可以正常工作WHERE some_col LIKE '%abc%' -> returns results
和
WHERE some_col LIKE '%pqr%' -> also returns results
答案 0 :(得分:14)
来自文档:
RLIKE B
如果A或B为NULL,则为NULL;如果为A的任何(可能为空)子字符串,则为TRUE 匹配Java正则表达式B,否则为FALSE。例如, 'foobar'RLIKE'foo'评价为TRUE,'foobar'RLIKE也是如此 '^ F。* R $'。
REGEXP B
与RLIKE相同。
所以,使用
WHERE some_col RLIKE 'abc|pqr|xyz'
答案 1 :(得分:8)
你可以使用rlike(regular_expression)。
WHERE some_col RLIKE '*abc*|*pqr*|*xyz*'
答案 2 :(得分:2)
我认为问题可能是您需要对类似声明进行分组。你的例子完成了:
SELECT *
FROM some_table
WHERE
(some_col LIKE '%abc%'
OR
some_col LIKE '%xyz%'
OR
some_col LIKE '%pqr%')
答案 3 :(得分:1)
如果您必须在UNION
中使用多个条件,则可以尝试使用LIKE
:
SELECT * FROM some_table WHERE some_col LIKE '%abc%'
UNION
SELECT * FROM some_table WHERE some_col LIKE '%xyz%'
UNION
SELECT * FROM some_table WHERE some_col LIKE '%pqr%'
答案 4 :(得分:0)
如果你只需要检查特定子串的列表,你可以使用不同的方法,例如。
WHERE InStr(some_col, 'abc') +InStr(some_col, 'pqr') +... >0