регулярное выражение для запроса MySQL? - PullRequest
0 голосов
/ 10 июня 2011

скажем, у меня есть varchar(18) field(name:firmware) в таблице базы данных mysql.

Формат строки выглядит так: ABC100-DE-3.10-0347 или может выглядеть как ABC100-DE-3.1-347. По сути, единственное, на что я могу положиться - это "-" delimiter, последняя часть (0347,347) называется номером сборки.

Часть 3.1/3.10 называется номером версии. Можно ли только выбрать номер сборки и номер версии из этого поля? Я подозреваю, что этот запрос может помочь в регулярных выражениях, поскольку строковые функции не справятся с этой задачей.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 10 июня 2011

Дайте этому шанс:

select SUBSTRING_INDEX(theField,'-',-1) as buildNumber,
       SUBSTRING_INDEX(SUBSTRING_INDEX(theField,'-',-2),'-',1) as versionNumber
from theTable
0 голосов
/ 10 июня 2011

RegEx вы ищете: ^(?:\w[\w\d]*\-)+(\d[\d\.]*)

В зависимости от того, где вы его используете, вам могут понадобиться начальный и конечный разделители: /^(?:\w[\w\d]*\-)+(\d[\d\.]*)/

Предполагается, что после первого разделителя (-) следует десятичная цифра, это номер вашей версии.

Не уверен на 100% насчет MySQL, но что-то вроде ...

SELECT * FROM `MyTable` WHERE `MyColumn` REGEXP '^(?:\w[\w\d]*\-)+(\d[\d\.]*)'

... может работать.

0 голосов
/ 10 июня 2011

Конечно - попробуйте что-то вроде [^-]+-[^-]+-([0-9\.]+)-([0-9]+), где первая группа захвата - это номер вашей версии, а вторая - номер сборки.

Если говорить точнее, первая группа ищет последовательность чисел и периодов, а вторая ищет последовательность чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...