【问题标题】:Correct way to use Regexp in select statement in MySQL在 MySQL 的 select 语句中使用 Regexp 的正确方法
【发布时间】:2017-05-23 20:57:36
【问题描述】:

MySQL 中,我想查询信息架构以查找特定数据库中的表。

我在下面的选择语句中使用Regexp

select TABLE_NAME from information_schema.tables where TABLE_SCHEMA='testing' and TABLE_NAME REGEXP 'test|test_10' 

输出:

123_test
123_test_10
temp_test
temp_test_10

在这里,我得到了以 testtest_10 结尾的表列表,如 select 语句中所示。

我在下面使用时得到了相同的结果。

select TABLE_NAME from information_schema.tables where TABLE_SCHEMA='testing' and TABLE_NAME REGEXP 'test' 

输出:

123_test
123_test_10
temp_test
temp_test_10

使用第二个语句,我怎样才能只获得以 'test` 结尾的表的列表。

我想要的预期输出是

预期输出:

123_test

我还想排除列表中的一些表。比如排除以temp开头并以test结尾的表

【问题讨论】:

  • 显示一些示例输入和预期输出(包括所有异常)
  • 您只是在寻找test,而不是特定于字符串的末尾。 test_10 是多余的(根据提供的正则表达式)。 TABLE_NAME REGEXP '(test|test_10)$' 将以 testtest_10 结尾。
  • 这些是testtemp 占位符还是只是文字值?我的意思是,如果这些是文字子字符串,LIKE 是最好的选择。
  • @Active_user 。 . .我认为temp_test也应该被退回。
  • 你真的在寻找test_10吗?看起来你从来没有真正想要那个。

标签: mysql sql regex select


【解决方案1】:

如果你只想要表名,那么 end 在测试中,不要打扰regexp。使用like

select TABLE_NAME
from information_schema.tables
where TABLE_SCHEMA = 'testing' and TABLE_NAME LIKE '%test' ;

为什么like 更可取?首先,它是标准 SQL。其次,在某些情况下(这不是其中之一)可以使用索引对其进行优化。

至于正则表达式,只要指定表达式需要在名称的末尾即可:

where TABLE_SCHEMA = 'testing' and TABLE_NAME REGEXP 'test$' ;

【讨论】:

  • 我得到了我的问题的部分结果。如何在语句本身中排除temp_test
  • @Active_user 可以添加and TABLE_NAME NOT LIKE 'temp%'
猜你喜欢
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
相关资源
最近更新 更多