Ruby on rails 如何使用特定的名称组合从数据库中获取数据

Ruby on rails 如何使用特定的名称组合从数据库中获取数据,ruby-on-rails,database,postgresql,ruby-on-rails-3,Ruby On Rails,Database,Postgresql,Ruby On Rails 3,我正在从事RubyonRails项目,我需要从数据库中获取数据,并使用特定的组合,如c*\u c*\u othername*可以编号为1,2,3等,如c1\u c1\u anystring。前缀c始终是固定的。 我正在尝试以下代码,但它不工作 Topic.where("name like ?", "%c*_c*_*%") 你可以试试 Topic.where("name like 'c_\\_c_\\_%'") 你可能需要 请尝试以下

我正在从事RubyonRails项目,我需要从数据库中获取数据,并使用特定的组合,如
c*\u c*\u othername
*可以编号为1,2,3等,如
c1\u c1\u anystring
。前缀c始终是固定的。 我正在尝试以下代码,但它不工作

Topic.where("name like ?", "%c*_c*_*%")
你可以试试

Topic.where("name like 'c_\\_c_\\_%'")
你可能需要

请尝试以下方法:

Topic.where('name SIMILAR TO ?', "%c\\d\\_c\\d\\_%")
如果您接受多个数字,请使用以下模式

Topic.where('name SIMILAR TO ?', "%c\\d+\\_c\\d+\\_%")
 Topic.where('name ~ ?', ".*c\\d+_c\\d+(_.*)?$")
如果您不喜欢转义下划线,也可以使用
~
进行模式匹配,如文档中所述:

Topic.where('name ~ ?', ".*c\\d+_c\\d+_.*")
正则表达式中的
\d
匹配0到9之间的数字

c*\u c*\u其他名称其他名称不是强制性的。有时名称是c5_c6,所以我也想得到这种类型的名称

请尝试下面的模式

Topic.where('name SIMILAR TO ?', "%c\\d+\\_c\\d+\\_%")
 Topic.where('name ~ ?', ".*c\\d+_c\\d+(_.*)?$")

我相信这不是关于Rails,而是关于数据库,您可以使用DB regexps解决它。您使用哪一个数据库?@Yakov postgresql数据库与表达式类似,在
中没有*(星号)符号,它属于正则表达式,与
类似或与表达式不类似。您必须使用这些符号(下划线)和%(百分比)符号(百分比),这两个符号分别指向一个或多个字符序列。谢谢你的回答,但它也返回c1-c2_测试。我只需要c1_c2_something@VarinderSohal我已经更新了我的答案,你能再试一次吗?这将返回带有数据的记录,如
cd\u cd\u anystring
,因为模式中的下划线匹配任何单个字符@user11350468,是的,我明白了,我想你的评论会有帮助:谢谢你的回答。。。它非常接近我所需要的
c*\u c*\u othername
othername不是强制性的。有些时候,这个名字是c5_c6,所以我也想知道这种类型的名字get@VarinderSohal已使用其他模式更新了答案,请立即检查