0

我的数据库中的表中有以下模式的以下字符串:

this_is_my_string_tester1
this_is_my_string_mystring2
this_is_my_string_greatstring

我正在尝试匹配以下划线分割的特定模式开头的所有字符串,即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

我不知道如何使用 like 声明来做到这一点。如果可以的话,这可能吗?

编辑

最后还有一个并发症:

 this_is_my_string

需要作为列表提供,即在

(this_is_my_string,  this_is_my_amazing_string, this_is_another_amazing_string)
4

2 回答 2

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。

于 2013-10-14T12:05:12.673 回答
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_”后是否出现更多_

于 2013-10-14T12:13:37.703 回答