mysql查询和regexp问题
几个月前,我问了下面的问题 然而,我遇到了一个问题 使用此查询时:mysql查询和regexp问题,mysql,sql,regex,Mysql,Sql,Regex,几个月前,我问了下面的问题 然而,我遇到了一个问题 使用此查询时: SELECT MAC, NAME FROM DB.HOST WHERE NAME REGEXP (SELECT CONCAT(LEFT(NAME, LENGTH(NAME)-1), "[0-9]+") FROM DB.HOST WHERE MAC="some mac"); 如果mac地址解析为“example_224-06-55”,并且它们是DB中另一个名为“example_224-06-55-00”的元素,则它们都将作为此
SELECT MAC, NAME FROM DB.HOST WHERE NAME REGEXP (SELECT CONCAT(LEFT(NAME, LENGTH(NAME)-1), "[0-9]+") FROM DB.HOST WHERE MAC="some mac");
如果mac地址解析为“example_224-06-55”,并且它们是DB中另一个名为“example_224-06-55-00”的元素,则它们都将作为此查询的结果显示。我只希望作为该查询的结果显示“example_224-06-55”
名称的大小会有所不同,示例只是示例
我真的很难弄明白这一点,非常感谢任何帮助
工作查询:
SELECT MAC, NAME FROM DB.HOST WHERE NAME REGEXP (SELECT CONCAT(LEFT(NAME, LENGTH(NAME)-1), "[0-9][[:>:]]") FROM DB.HOST WHERE MAC="some mac");
如果要为以数字结尾的字符串编写模式,如“xxx xx xx”,而不是
“[0-9]+”
,则可以使用“\d\d-\d\d-\d”
根据需要更新正则表达式
SELECT MAC, NAME FROM DB.HOST
WHERE NAME REGEXP
(SELECT CONCAT(LEFT(NAME, LENGTH(NAME)-1), "_[0-9]+-[0-9]+-[0-9]+$")
FROM DB.HOST WHERE MAC="some mac");
MySQL支持一种特殊的单词边界模式来解决这个问题
SELECT MAC, NAME FROM DB.HOST
WHERE NAME REGEXP (
SELECT CONCAT(LEFT(NAME, LENGTH(NAME)-1), '[0-9]+[[:>:]]')
FROM DB.HOST
WHERE MAC='some mac'
);
请参阅,单词边界模式记录在页面底部附近
ps:在SQL中对字符串文本使用单引号。双引号用于分隔标识符。每次大小都可能不同。它可能不总是只有7位,下次可能是9位,或者5位。然后请澄清为什么字符串“example_224-06-55-00”不能满足您的要求。是关于尾随的零吗?因为如果“某个mac”解析为名称“example_224-06-55”,并且它们在DB“example_224-06-55-00”中存在另一个名称,它们都会出现。我只希望“示例_224-06-55”出现。谢谢,只是没有立即了解确切的问题是什么:)它可以有不同的长度,这只是一个示例。非常感谢,先生,这非常有效!但是,为了让它工作,我必须删除“+”。