使用通配符对阵列列进行Activerecord查询

时间:2016-10-19 11:40:41

标签: ruby-on-rails ruby postgresql activerecord

所以,让我说我有一个Customer模型,其数组列为phones。 通过手机找到所有客户非常容易

Customer.where('? = ANY(phones)', '+79851234567')

但是当我想找到类似于给定电话的客户时,我无法弄清楚如何使用通配符LIKE,例如:

Customer.where('ANY(phones) LIKE ?', '+7985%')

我正在使用PostgreSQL 9.5和Rais 4.2

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我认为,首先,最好使用带有customer_id,phone_number字段的第二台手机。我认为这是更多的轨道方式)。通过这种方式,您可以使用此查询

Phone.where("phone_number LIKE ?", '%PART%').first.customer

如果您在某些文本字段中序列化数组(例如JSON),则应在模式的两端使用%:

Customer.where('phones LIKE ?', '%+7985%')

如果数据库中有数组,则应使用 unnest()函数将数组扩展为一组行。

答案 1 :(得分:1)

你能试试吗

Customer.where("array_to_string(phones, ', ') like ?", '+7985%')

我相信这会奏效。