几个月前,我问了下面的问题。
然而,我遇到了一个问题。
当我使用此查询时:
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");
答案 0 :(得分:2)
更新您想要的正则表达式。
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");
答案 1 :(得分:2)
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中使用单引号作为字符串文字。双引号用于分隔标识符。
答案 2 :(得分:1)
如果你想为以'xxx-xx-xx'而不是"[0-9]+"
之类的数字结尾的字符串写一个模式,你可以使用"\d\d\d-\d\d-\d\d"