Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于mysql查询的正则表达式?_Mysql_Regex_String - Fatal编程技术网

用于mysql查询的正则表达式?

用于mysql查询的正则表达式?,mysql,regex,string,Mysql,Regex,String,比如说,我在mysql数据库表中有一个varchar(18)字段(名称:firmware) 字符串格式类似于:ABC100-DE-3.10-0347,也可能类似于ABC100-DE-3.1-347。基本上,我唯一可以依赖的是“-”分隔符,最后一部分(0347347)称为buildnumber 3.1/3.10部分称为版本号。是否可以仅从该字段中选择内部版本号和版本号?我怀疑这个查询可能会对regex有所帮助,因为字符串函数无法完成这项工作 谢谢 试一试: select SUBSTRING_IND

比如说,我在mysql数据库表中有一个
varchar(18)字段(名称:firmware)

字符串格式类似于:
ABC100-DE-3.10-0347
,也可能类似于
ABC100-DE-3.1-347
。基本上,我唯一可以依赖的是
“-”分隔符,最后一部分(
0347347
)称为buildnumber

3.1/3.10
部分称为版本号。是否可以仅从该字段中选择内部版本号和版本号?我怀疑这个查询可能会对regex有所帮助,因为字符串函数无法完成这项工作

谢谢

试一试:

select SUBSTRING_INDEX(theField,'-',-1) as buildNumber,
       SUBSTRING_INDEX(SUBSTRING_INDEX(theField,'-',-2),'-',1) as versionNumber
from theTable

当然-尝试类似于
[^-]+-[^-]+-([0-9\.]+)-([0-9]+)
的方法,其中第一个捕获组是您的版本号,第二个是内部版本号


具体来说,第一组查找数字和句点序列,第二组查找数字序列。

您要查找的正则表达式:
^(?:\w[\w\d]*\-)+(\d[\d\.]*)

根据您使用它的位置,您可能需要开始和结束分隔符:
/^(?:\w[\w\d]*\-)+(\d[\d\.]*)/

假设第一次分隔符(
-
)后面跟一个十进制数字,这就是您的版本号

不是百分之百确定MySQL,但是类似于

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