Impala 查询:在竖线分隔的列表中查找值
Impala Query: Find value in pipe-separated list
我有一列包含多行竖线分隔的 STRING 值:
| colA |
___________
| 5|4|2|255 |
| 5|4|4|0 |
| 5|4|4|3 |
| 5|4|4|4 |
我需要创建一个查询,该查询将 select 所有包含 4 或 5,但绝不会包含 2 或 3 的行。大致如下:
SELECT t.colA
FROM my_table t
WHERE (t IN ("4", "5") AND t NOT IN ("2","3")
导致:
| colA |
___________
| 5|4|4|0 |
| 5|4|4|4 |
我最终结合使用了以下两个答案,因为单独使用任何一种方法仍然让我得到仅包含“255”的行。这是最终查询:
SELECT t.colA
FROM my_table t
WHERE (t.colA IN ('4', '5') OR t.colA LIKE "%|5|%"
OR t.colA LIKE "%|5" OR t.colA LIKE "5|%")
AND t.colA NOT LIKE "%3%"
AND t.colA NOT LIKE "%|2|%"
AND t.colA NOT REGEXP "^2|%"
AND t.colA NOT REGEXP "%|2$"
可能有更优雅的方法来执行此操作,但它确实有效。
使用 LIKE
函数怎么样?
where (t like '%4%' or t like '%5%')
and (t not like '%2%' and t not like '%3%')
这应该可以完成工作。
我有一列包含多行竖线分隔的 STRING 值:
| colA |
___________
| 5|4|2|255 |
| 5|4|4|0 |
| 5|4|4|3 |
| 5|4|4|4 |
我需要创建一个查询,该查询将 select 所有包含 4 或 5,但绝不会包含 2 或 3 的行。大致如下:
SELECT t.colA
FROM my_table t
WHERE (t IN ("4", "5") AND t NOT IN ("2","3")
导致:
| colA |
___________
| 5|4|4|0 |
| 5|4|4|4 |
我最终结合使用了以下两个答案,因为单独使用任何一种方法仍然让我得到仅包含“255”的行。这是最终查询:
SELECT t.colA
FROM my_table t
WHERE (t.colA IN ('4', '5') OR t.colA LIKE "%|5|%"
OR t.colA LIKE "%|5" OR t.colA LIKE "5|%")
AND t.colA NOT LIKE "%3%"
AND t.colA NOT LIKE "%|2|%"
AND t.colA NOT REGEXP "^2|%"
AND t.colA NOT REGEXP "%|2$"
可能有更优雅的方法来执行此操作,但它确实有效。
使用 LIKE
函数怎么样?
where (t like '%4%' or t like '%5%')
and (t not like '%2%' and t not like '%3%')
这应该可以完成工作。