impala查询:在管道分隔列表中查找值

dkqlctbz  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(262)

我有一个列,其中包含以管道分隔的字符串值行:

|   colA    |
 ___________
| 5|4|2|255 |
| 5|4|4|0   |
| 5|4|4|3   |
| 5|4|4|4   |

我需要创建一个查询,该查询将选择包含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$"

也许有一种更优雅的方法可以做到这一点,但这确实起到了作用。

xesrikrc

xesrikrc1#

用这个怎么办 LIKE 功能?

where (t like  '%4%' or t like  '%5%')
and (t not like  '%2%' and t not like  '%3%')

这应该可以胜任。

相关问题