不知道如何为我的问题加上标题…大声笑。
以下是我需要的。
我的数据库中的值如下所示: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子句。