Выберите, где json содержит

#json #postgresql

Вопрос:

У меня есть таблица postgres:

       Column      |          Type           
------------------ ------------------------ 
 id               | bigint                 |
 foo_id           | integer                |
 foo_name         | character varying(255) |
 bar_id           | json                   | 
 

С ценностями

      id |      foo_id    |       foo_name                |             bar_id
-------- ---------------- ------------------------------- ----------------------------
     17 |         717639 | name 1                        | [910, 5383774, 437, 5350]
     18 |        8442028 | name 2                        | [7274, 6241861, 437, 73669939]
     19 |          77415 | name n                        | [7274, 5513, 249642574, 743181502]
 

Как я могу выбрать из этой таблицы идентификаторы записей, где bar_id содержит значение 437?

Комментарии:

1. пожалуйста, поделитесь своей попыткой

Ответ №1:

Вы можете использовать оператор @> , чтобы проверить, содержит ли массив определенное значение.

Однако это работает только со jsonb значениями, а не json со значениями. Поэтому вам нужно создать свою колонку.

 select *
from the_table
where bar_id:jsonb @> '[437]';
 

Было бы лучше изменить тип столбца на jsonb .