MySQL REGEXP在找不到预期结果的地方

时间:2018-09-26 15:37:48

标签: mysql sql regex

我有这个查询:

SELECT certREF,CAST(SUBSTRING_INDEX(certREF,'-',-1) as UNSIGNED) as REF 
FROM certificatecatalog 
WHERE certREF is not null AND `certREF` REGEXP 'F[\d]+-[\d]+' 
ORDER BY REF DESC 
Limit 0,1

我在certREF列中有数据行,例如:

F17-1257
F17-3546
F18-8854
F19-9854

我希望能够在“ F number -”

之后提取最高的数字

当我将它们放置在其中一个实时正则表达式测试器中时,这种可靠的表达式似乎起作用。

但是我得到一个空结果集。

如果有人可以让我知道我要去哪里错了:)

谢谢

2 个答案:

答案 0 :(得分:1)

我认为最简单的方法是隐式转换:

select max(substr(certRef, 2) + 0)
from certificatecatalog
where certRef like 'F%';

MySQL会将第一个F之后的数字转换为数字,并停在第一个非数字。然后返回最大值。不需要正则表达式。

编辑:

如果要在连字符后加上部分,则可以执行以下任一操作:

select max(substr(certRef, 5) + 0)
from certificatecatalog
where certRef like 'F%';

或:

select max(substring_index(certRef, '-', -1) + 0)
from certificatecatalog
where certRef like 'F%';

答案 1 :(得分:0)

您可以将substr()instr()函数一起使用:

select max(substr(certREF,instr(certREF,'-')+1,length(certREF)))
       as maxNumber
  from certificatecatalog;

MAXNUMBER
  9854

SQL Fiddle Demo