不知道如何标题我的问题...哈哈。
下面是我需要的。
我的数据库中的值如下所示:test_example-1、test_example-2、test_example-TD-1
这些值的长度可以不同,“test_example-”只是一个示例,某些值将具有不同的名称。
当我执行查询来获取所有看起来像“test_example-”的值时,我得到了所有内容,因为我以这种方式使用通配符值“test_example-%”。但是,我不希望结果中出现“test_example-TD-1”。我只想要非 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 http://dev.mysql.com/doc/refman/5.0/en/regexp.html#operator_regexp
根据您给定的查询,它将是:
SELECT MAC, NAME FROM HOST WHERE NAME REGEXP CONCAT(LEFT(NAME, LENGTH(NAME)-1), "[0-9]+") AND MAC="some mac address"
请注意,您发布的查询中有一个错误 - 您有两个 WHERE 子句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)