postgres查询涉及正则表达式数组

时间:2017-01-31 08:21:36

标签: ruby-on-rails postgresql

我有这张桌子:

create_table "packages", force: :cascade do |t|
  t.string   "sender_type"
  t.integer  "sender_account_id"
  t.integer  "sender_user_id"
  t.string   "address"
  t.text     "type"
  t.datetime "created_at",        null: false
  t.datetime "updated_at",        null: false
  t.string   "recipients",                     array: true
end

收件人数组采用模型类型和ID,用逗号分隔,就像["Manufacturer,4", "Retail,6"]一样。

在我的where查询中,我希望找到包含任何带有“Manufacturer”字样的收件人的软件包:

Package.where("sender_type = ? and recipients.include = ?", "school", regex).

只是想知道我是否能够接近这个

2 个答案:

答案 0 :(得分:0)

如果您要搜索的字符串始终位于数组的第一位,您可以像这样访问它:

Package.where("sender_type = ? and recipients[0] LIKE = ?", "school", "Manufacturer").

未经测试,因此您可能需要进行调整。

答案 1 :(得分:0)

其中一种方法是将recepients转换为text

Package.where("sender_type = ? and recipients::text LIKE ?", "school", regex)

或者您可以使用unnest函数将数组转换为行集。请检查此答案:https://stackoverflow.com/a/7222285/7362128