我有这个查询:
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 数字-"之后的最高数字
当我把它放在其中一个实时正则表达式测试器中时,regualar 表达式似乎有效。
但是我得到一个空的结果集。
如果有人能让我知道我哪里出错了:)
谢谢
我认为最简单的方法是隐式转换:
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%';
您可以将substr()
与instr()
函数一起使用为:
select max(substr(certREF,instr(certREF,'-')+1,length(certREF)))
as maxNumber
from certificatecatalog;
MAXNUMBER
9854
SQL 小提琴演示