mysql详细查询字符串,就像通配符一样

时间:2011-05-17 19:40:26

标签: mysql sql regex wildcard

不确定如何标题我的问题......哈哈。

以下是我的需要。


我的数据库中的值如下所示:test_example-1,test_example-2,test_example-TD-1

值的长度可能不同,“test_example-”只是一个示例,其中一些值将具有不同的名称。

当我执行查询以获取看起来像这个“test_example-”的所有值时,我得到了所有内容,因为我以这种方式使用外卡值“test_example-%”。但是,我不希望结果中出现“test_example-TD-1”。我只想要NON-TD值。那么,我怎么能得到所有的“test_example-”而不会得到“ - ”之后只有一个数字整数的东西。

数据库中的值不会超过“ - ”后面的单个数字(0-9)。所以基本上我需要一个查询,搜索看起来像这个“test_example- [0-9]”的值。

我该怎么做?如果这令人困惑并需要澄清,请告诉我。谢谢!


这是我正在做的确切查询以缓解一些混淆:

SELECT MAC, NAME FROM HOST WHERE NAME LIKE (SELECT CONCAT(LEFT(NAME, LENGTH(NAME)-1), "%") FROM HOST WHERE MAC="some mac address");

这是工作结果(感谢swati):

SELECT MAC, NAME FROM HOST WHERE NAME REGEXP CONCAT(LEFT(NAME, LENGTH(NAME)-1), "[0-9]+") AND MAC="some mac address";

4 个答案:

答案 0 :(得分:2)

SELECT * FROM `foo` WHERE `value` REGEXP "test_example-[:digit:]+"

这应该适用于test_example- [0-9]。更多关于Character Classes and REGEXP

根据您的查询,它将是:

SELECT MAC, NAME FROM HOST WHERE NAME REGEXP CONCAT(LEFT(NAME, LENGTH(NAME)-1), "[0-9]+") AND MAC="some mac address"

请注意,您发布的查询中存在错误 - 您有两个WHERE子句。

答案 1 :(得分:1)

where substring(field,locate('-',field)+1,1) in ('1','2','3','4','5','6','7','8','9','0')

答案 2 :(得分:1)

您可以尝试使用regexp,但我不知道它会有多高效。您可能希望在代码中而不是在sql中执行此操作。但仍然:

SELECT * FROM `foo` WHERE `value` REGEXP "yourRegexp"

只需创建满足您需求的任何正则表达式。

答案 3 :(得分:1)

您可以使用下划线字符作为单个字符的通配符。

"test_example-_"