比方说,我在mysql数据库表中有一个varchar(18) field(name:firmware)。
字符串格式可能类似于:ABC100-DE-3.10-0347,也可能类似于ABC100-DE-3.1-347。基本上,我唯一可以依赖的就是"-" delimiter,最后一部分(0347,347)称为内部版本号。
3.1/3.10部件称为版本号。是否可以仅从该字段中选择内部版本号和版本号?我怀疑这个查询可能会把帮助变成正则表达式,因为字符串函数不能完成这项工作。
谢谢!
发布于 2011-06-11 02:14:19
试一试:
select SUBSTRING_INDEX(theField,'-',-1) as buildNumber,
SUBSTRING_INDEX(SUBSTRING_INDEX(theField,'-',-2),'-',1) as versionNumber
from theTable发布于 2011-06-11 02:15:27
当然-可以尝试像[^-]+-[^-]+-([0-9\.]+)-([0-9]+)这样的东西,其中第一个捕获组是您的版本号,第二个是内部版本号。
具体地说,第一组查找数字和句点序列,第二组查找数字序列。
发布于 2011-06-11 02:18:06
您正在寻找的RegEx:^(?:\w[\w\d]*\-)+(\d[\d\.]*)
根据您在哪里使用它,您可能需要开始和结束分隔符:/^(?:\w[\w\d]*\-)+(\d[\d\.]*)/
假设第一次分隔符(-)后面跟一个十进制数字时,这就是您的版本号。
不是百分之百确定的MySQL,但类似于...
SELECT * FROM `MyTable` WHERE `MyColumn` REGEXP '^(?:\w[\w\d]*\-)+(\d[\d\.]*)'..。也许行得通。
https://stackoverflow.com/questions/6310338
复制相似问题