Impala 用于在管道分隔列表中查找“2”而非“255”的正则表达式

Impala regex to find "2", but not "255", in pipe-delimited list

在竖线分隔列表中查找值,其中值必须包含 45,但绝不包含 23。但是,公认的解决方案 return 本身就是值 255

我有一个数据集,其中的竖线分隔值可以是 01234 0r 255,例如:

|    colA    |
 ____________
| 1|1|0|255  |
| 5|4|4|2    |
| 5|4|4|3    |
| 5|4|4|4    |
| 1|0|0|0    |
| 0|2|0|1|2  |
| 5|5|0|5    |
| 0|5        |
| 5|5|255|255|
| 0|3|1|2|3  |
| 5|5|5|2|3|3|
| 0|2|0|0|0|2|
| 5|255|1|1|5|
| 4|255|4    |
| 2|2|3      |
| 255|0      |
| 5          |
| 5|5|1      |

我需要一个查询,该查询将 return 行包含值 45,但绝不会包含 23

|    colA    |
 ____________
| 5|4|4|3    |   
| 5|4|4|4    |
| 5|5|0|5    |
| 0|5        |
| 5|5|255|255|
| 5|255|1|1|5|
| 4|255|4    |
| 5          |
| 5|5|1      |

我最接近的是这个查询:

SELECT clin.clin_sig 
FROM clinvar clin
WHERE (clin_sig NOT REGEXP '3|2[^5]'
AND clin_sig REGEXP '4|[^25]5')

但它缺少以下条目,所以有些东西不对劲:

我也试过这个,但是速度很慢,而且仍然缺少一些结果:

WHERE (clin.clin_sig LIKE "%4%" OR clin.clin_sig REGEXP "^5$"  
  OR clin.clin_sig REGEXP "^5\|" 
  OR clin.clin_sig REGEXP "\|5$" OR clin.clin_sig REGEXP "\|5\|")
AND clin.clin_sig NOT REGEXP "^2$" 
AND clin.clin_sig NOT REGEXP "\|2$"
AND clin.clin_sig NOT REGEXP "^2\|"
AND clin.clin_sig NOT LIKE "%3%"                          
    clin_sig     REGEXP '^[[:<:]](4|5)[[:>:]]$'
AND clin_sig NOT REGEXP '^[[:<:]](2|3)[[:>:]]$'

请提供更多测试用例。