admin

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

sql

不知道如何为我的问题加上标题…大声笑。

以下是我需要的。


我的数据库中的值如下所示: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";

阅读 184

收藏
2021-05-10

共1个答案

admin

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子句。

2021-05-10