几个月前,我问了以下问题。
但是,我遇到了一个问题。
当我使用此查询时:
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”,并且它们是数据库中名为“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");
最佳答案
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'
);
参见http://dev.mysql.com/doc/refman/5.1/en/regexp.html ,单词边界模式记录在页面底部附近。
ps:在 SQL 中对字符串文字使用单引号。双引号用于分隔标识符。
关于mysql查询和正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6834056/