mysql查询和regexp问题

时间:2011-07-26 17:29:41

标签: mysql sql regex

几个月前,我问了下面的问题。

My question.

然而,我遇到了一个问题。

当我使用此查询时:

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");

3 个答案:

答案 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"