mysql - Impala 正则表达式在管道分隔列表中查找 "2"但不是 "255"

标签 mysql sql regex impala

originally asked for help在管道分隔列表中查找值,其中值必须包含 45,但绝不能包含 23 .但是,公认的解决方案会自行返回值 255

我有一个用竖线分隔值的数据集,可以是0123,4 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      |

我需要一个查询,该查询将返回包含值 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')

但它缺少以下条目,所以有些东西很奇怪:

  • 5
  • 5|255
  • 5|5|5|5|5|5|5
  • 5|0
  • 5|255|255
  • 5|5|1

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

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)[[:>:]]$'

请提供更多测试用例。

关于mysql - Impala 正则表达式在管道分隔列表中查找 "2"但不是 "255",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31353785/

相关文章:

php zend framework 日志 mysql 查询

mysql - LOAD DATA LOCAL INFILE 特殊情况

mysql - 设计在线评估数据库的更好方法

c# - 如何修复对象引用未设置到对象实例的 MySql 连接问题

java - 按顺序匹配新行文本内容

php - 如何在数据库类中创建插入函数以插入具有多个列和多个值的新记录(使用 PDO )?

mysql - 在两个日期之间搜索的查询

mysql - 在 MySQL 中存储出勤率和获取时间差的最佳方法?

php - 如何匹配正则表达式中的反斜杠

regex - 如何将正则表达式绑定(bind)到 emacs 中的组合键?