2011-07-26 3 views
2

Несколько месяцев назад я задал вопрос ниже.mysql query и regexp problem

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

Если адрес макинтош разрешен к «example_224-06-55» и их это еще один элемент в БД с именем «example_224-06-55-00» они будут отображаться в результате этого запроса. Я хочу, чтобы «example_224-06-55» отображался в результате этого запроса.

Размер имени будет отличаться, примеры - это просто примеры.

У меня очень тяжелое время понять это, любая помощь очень ценится!

РАБОЧИЙ QUERY:

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

ответ

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. Двойные кавычки предназначены для идентификаторов с разделителями.

+0

Большое спасибо, сэр, это сработало! Однако, чтобы работать, мне пришлось удалить «+». – prolink007

1

Если вы хотите написать шаблон для строк, заканчивающихся цифрами, как «ххх-хх-хх» вместо "[0-9]+" вы можете использовать "\d\d\d-\d\d-\d\d"

+0

Размер может быть различным каждый раз. Это может быть не всегда только 7 цифр, это может быть 9 в следующий раз или 5. – prolink007

+0

Тогда, пожалуйста, поясните, почему строка «example_224-06-55-00» не удовлетворяет вашим требованиям. Это о конечных нулях? –

+0

Потому что, если «некоторый mac» разрешен к имени «example_224-06-55», и их существует другое имя в БД «example_224-06-55-00», они оба появятся. Мне нужно только «example_224-06-55». – prolink007

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

Это может быть длина разветвления, что было просто примером. – prolink007

+0

+1 за помощь! – prolink007