所以,让我说我有一个Customer
模型,其数组列为phones
。
通过手机找到所有客户非常容易
Customer.where('? = ANY(phones)', '+79851234567')
但是当我想找到类似于给定电话的客户时,我无法弄清楚如何使用通配符LIKE
,例如:
Customer.where('ANY(phones) LIKE ?', '+7985%')
我正在使用PostgreSQL 9.5和Rais 4.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%')
我相信这会奏效。