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

时间:2015-07-02 00:32:32

标签: sql regex impala

我有一个包含多个管道分隔的STRING值的列:

|   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$"

可能有一种更优雅的方式来做到这一点,但这就是诀窍。

1 个答案:

答案 0 :(得分:3)

使用LIKE功能怎么样?

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

那应该做的工作。