选择匹配整数值子集的记录

时间:2015-12-06 10:06:23

标签: ruby-on-rails ruby activerecord

我有一个名为User(由Devise创建)的表,以及一个类型为string的列school

school的一些示例值:"0""1""012""023"

我想在值中选择包含"0"的行。类似于#include?在Ruby中的工作方式。 E.g:

"012".include?("0") == true
"1".include?("0") == false

如何使用ActiveRecord查询执行此操作?

2 个答案:

答案 0 :(得分:2)

取决于您的数据库类型(MySQL,PostgreSQL ..),但基本上您可以执行以下操作:

使用' 0'返回所有值字符串中的某个地方:

User.where("school LIKE '%0%'")

仅返回前缀为' 0':

的值
User.where("school LIKE '0%'")

答案 1 :(得分:0)

正如@Drenmi所述,数据库不会在整数字段中存储前导零。如果这是前导零值具有重要性的标识符或电话号码,则需要将数据存储在另一种字段类型中。

使用字符串字段存储数字。然后,您就可以使用LIKE查询来获取所需内容。在这种情况下,以下是一种方法。

您可以使用arel和matches方法。见How to do a LIKE query in Arel and Rails?

所以:

返回字符串中某处'0'的所有值:

users = User.arel_table
User.where(users[:school].matches('%0%'))

仅返回前缀为“0”的值:

users = User.arel_table
User.where(users[:school].matches('0%')