尝试使用mysql

问题描述

我正在尝试查询我们的数据库以查找具有唯一参数的特定交易类型。

有多种格式,我正在寻找带有-Q /参数的交易。

BCR*DEVSTS  
BCR*1150  
BCR*1150/28AUG  
BCR*DEVSTS-Q/28AUG  
BCR*DEV-Q/28AUG  

我能够找到BCR个事务,但是由于内存限制,我只能获得前10k行,而它们没有-Q/参数。我正在尝试创建一个仅选择所需交易的查询

我使用以下查询基础交易:

select * 
from transaction_200827 
where reqresponse= 'Q' and message rlike '^BCR.*'

我已经查看了多个网站,但找不到这种情况的示例。我已经尝试了提供的示例的变体,但没有成功:

select * from transaction_200827 where reqresponse= 'Q' and message rlike '^BCR(Q/).*' 
select * from transaction_200827 where reqresponse= 'Q' and message rlike '^BCR%Q/%.*'  

我对构建查询还很陌生,不胜感激生成此类查询的任何指导或方向。

解决方法

您正在混合使用正则表达式和LIKE模式。使用其中一个

message LIKE 'BCR%-Q/%'

message RLIKE '^BCR.*-Q/'

您的模式中还缺少-之前的Q

无需在正则表达式的末尾添加.* -当正则表达式匹配字符串中的任何位置时,RLIKE成功,而不必匹配整个字符串({{ 1}}锚点强制它从头开始匹配,但是没有^锚点将它扩展到末尾。

如果该列具有索引,我建议使用$ -根据我的经验,LIKE不利用索引。无论哪种方式,索引都只会在开始时用于匹配RLIKE,其余的则需要扫描所有带有该前缀的值。