MySQL REGEXP 在哪里没有找到预期的结果

标签 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

我希望能够提取“Fnumber-”之后的最大数字

当我将正则表达式放入其中一个实时正则表达式测试器中时,正则表达式似乎起作用了。

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

如果有人能让我知道我哪里出错了:)

谢谢

最佳答案

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

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%';

关于MySQL REGEXP 在哪里没有找到预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52521531/

相关文章:

php - 这是 flash、php 和 mysql 中的错误登录算法吗?

MySQL:如何选择表的某些行并执行 SUBSTRING_INDEX

sql - 使用另一个表的最大日期更新一个表

sql - Sql 2005 中的 YearFrac

.net - 可以处理机器生成的正则表达式 : *non-backtracking*, O(n) 的正则表达式实现?

具有 2 个或更多参数的 Mysql LIKE 与 REGEXP

MySQL 仅追加模型 - 使用 DELETE 清理查询

java - 在java中关闭MySQL数据库连接

python - SQLAlchemy 正确的模型定义和选择/插入

javascript - 将搜索选项添加到选择列表