我在db中的表中有以下模式的以下字符串:
this_is_my_string_tester1
this_is_my_string_mystring2
this_is_my_string_greatstring
我试图匹配所有以下划线分割的特定模式开头的字符串,即{。{1}},然后是通配符最后一部分
不幸的是,有一些额外的复杂功能,其中一些字符串如下所示:
this_is_my_string_
因此,请以下列为例:
this_is_my_string_tester1_yet_more_text
this_is_my_string_mystring2_more_text
this_is_my_string_greatstring_more
我想回来了:
this_is_my_string_tester1
this_is_my_string_mystring2
this_is_my_string_greatstring
this_is_my_string_tester1_yet_more_text
this_is_my_string_mystring2_more_text
this_is_my_string_greatstring_more
我不知道如何用类似的声明来做这件事。这有可能吗?
修改
最后有一个并发症:
this_is_my_string_tester1
this_is_my_string_mystring2
this_is_my_string_greatstring
需要作为列表提供,即
this_is_my_string
答案 0 :(得分:1)
SELECT * FROM atable WHERE afield REGEXP 'this_is_my_string_[a-z]+'
如果您在野外有索引并且
可能会更快SELECT * FROM atable WHERE afield REGEXP 'this_is_my_string_[a-z]+'
AND afield LIKE 'this_is_my_string_%'
编辑问题后:
无论
SELECT * FROM atable
WHERE afield REGEXP '(this_is_my_string|this_is_my_amazing_string)_[a-z]+'
或者你想要一个带有前缀表的东西:
SELECT *
FROM atable AS t,
prefixes AS p
WHERE afield REGEXP CONCAT(p.prefix, '_[a-z]+')
正如参考文档所述,不是可能的,因为模式(字符串文字)是必需的。不过尝试一下。 @KayNelson的回答是LIKE(?)和INSTR可能代替REGEXP。
答案 1 :(得分:0)
试试这个
SELECT * FROM db.table WHERE strings LIKE 'this_is_my_string_%' AND instr(Replace(strings,"this_is_my_string_",""),"_") = 0;
检查更换标准“this_is_my_string _”
后是否发生更多_