我有一个ATable(id,value),其值类型是
json
id | value
--------------------------------------------------
1 | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 237, 238] }
2 | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 234, 545, 23] }
3 | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [98, 56, 2] }
4 | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [28345, 100, 333, 987] }
我写了
ATable.where("value->>'user_ids' LIKE ?", "%283%")
结果:
id | value
--------------------------------------------------
1 | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 237, 238] }
2 | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 234, 545, 23] }
4 | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [28345, 100, 333, 987] }
预期结果:
id | value
--------------------------------------------------
1 | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 237, 238] }
2 | { 'start': '2023-10-02', 'end': '2023-10-05', user_ids: [283, 234, 545, 23] }
我尝试
ATable.where("value->>'user_ids' LIKE In (?)", "283")
但不起作用
谢谢。
不是 PG 专家,但使用
"%283%"
的问题是它将匹配包含这些数字的任何数字。这就是返回 id 为 4 的行的原因 (28345)。
尝试将
@>
运算符与 ->
结合使用:
ATable.where("value->'user_ids' @> ?", '[283]')
不确定这是否应该标记为 Rails 问题,绝对不应该标记为 Ruby 问题。