【问题标题】:Filter by exact substring in MySQL在 MySQL 中按确切的子字符串过滤
【发布时间】:2022-10-13 09:37:28
【问题描述】:

假设我有这张表,其中有一列名为groups

groups
X0C5TB24
X11C17N24
X1C14B25
X7C18B15
X0C88TB12
...

我想使用WHERE 过滤给我正好"X0""X1" 的值,所以我的最终结果应该是:

groups
X0C5TB24
X1C14B25
X0C88TB12

到目前为止我的尝试:

WHERE
    groups REGEXP "^X[0-1]" 

WHERE
    SUBSTR(groups, 1,2) IN ("X0","X1")

但是这些也返回"X11C17N24",这不是我想要的,因为它实际上是X11 而不是X0X1(值中的C 充当分隔符)。

我在这里或其他地方都找不到解决方案或接近我的问题的东西,所以任何建议或建议将不胜感激。

【问题讨论】:

  • 试试:REGEXP '^X[0-1][a-zA-Z]'
  • 为什么不应该返回那个?它以X1 开头,这就是您说要匹配的内容。
  • @Barmar,我认为C 是那些X 的分隔符.. 因为"X11C17N24" 实际上是X11,所以不应该返回值。
  • 顺便说一句,MySQL workbench 8.0 不代表 MySQL 版本。运行 SELECT version(); 以检查确切的 MySQL 版本。
  • @FanoFN您可能是对的,但是OP应该在您将其编辑到问题中之前对其进行确认。

标签: mysql string mysql-workbench


【解决方案1】:

如果 C 总是作为你的分隔符,你可以简单地将它添加到你的表达式中。例子:

WHERE groups REGEXP "^X[01][C]"

产生以下输出:

groups
X0C5TB24
X0C88TB12
X1C14B25

如果字符可以是任何字母,但不是数字,则使用它来获得相同的结果:

WHERE groups REGEXP "^X[0-1][a-zA-Z.]"

【讨论】:

  • 琐事:[01][0-1] 一样好用。
  • @RickJames Correct 你的评论很有帮助
  • [0-9] 与 [0123456789] 相同,但与仅返回 0 和 9 的 [09] 不同。破折号用于表示起始数字和结束数字之间的所有数字。显然,[01] 之间不包含任何数字是没有必要的。
猜你喜欢
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 2011-10-01
相关资源
最近更新 更多