Mysql喜欢匹配字符串末尾的模式

时间:2013-10-14 11:59:34

标签: mysql

我在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

2 个答案:

答案 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 _”

后是否发生更多_