![](/img/trans.png)
[英]MySQL query using LIKE and a wildcard to match anything but empty string
[英]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.