【问题标题】:mysql where IN statement using regex?mysql where IN 语句使用正则表达式?
【发布时间】:2017-03-23 13:43:07
【问题描述】:

最好的方法是什么?

select * from myTable where hostname IN ('host1-%', 'host2-%', 'host3-%')

主机名有时会以完全限定的域或简单的 host1 形式返回

【问题讨论】:

  • WHERE hostname LIKE 'host1-%' OR hostname LIKE 'host2-%' OR hostname LIKE 'host3-%'

标签: mysql


【解决方案1】:

这是你想要的吗

select * from myTable where hostname REGEXP '^host[123]-'

select * from myTable where hostname REGEXP '^host[1-3]-'

【讨论】:

  • 开头需要^锚点,结尾不需要.*
  • 感谢您发现这一点 - 错过了剪切和粘贴时的 ^ 并自动将 % 转换为 .* 而不认为它是不需要的。
【解决方案2】:

要添加到 PaulF 的答案,您可能需要结合使用 LIKEREGEXP,例如

SELECT * FROM myTable
WHERE hostname LIKE 'host%' AND hostname REGEXP '^host[1-3]-'

这是因为 MySQL 在处理 REGEXP 时不使用索引,但是当模式具有常量前缀时,它将使用它来处理 LIKE。因此,如果您在 hostname 列上有索引,这将使用索引缩小到 hostXXX,然后只需对这些行执行正则表达式匹配。

Mysql optimization for REGEXP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多