繁体   English   中英

mysql详细查询字符串,如通配符

[英]mysql detail query string, like 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";
SELECT * FROM `foo` WHERE `value` REGEXP "test_example-[:digit:]+"

这应该适用于test_example- [0-9]。 有关字符类和REGEXP的更多信息

对于您给定的查询,它将是:

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

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

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

您可以尝试使用regexp ,尽管我不知道它的效率如何。 您可能想在代码中而不是在sql中进行。 但仍然:

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

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

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

"test_example-_"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM