Как запросить массив, который присутствует в виде строки в postgres? - PullRequest
1 голос
/ 19 сентября 2019

У меня есть таблица с именем table со столбцом с именем column с типом данных text со значениями типа '["1","2"]'.

Мне нужно получить все записи, в которых "1" равен единице.элемента.

select * 
from table 
where column.....?

Каким должен быть оператор where?

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Просто используйте LIKE.Сохраняйте двойные кавычки, чтобы пропустить 1, но избегайте других чисел, содержащих эту цифру.

select * 
from table 
where column like '%"1"%' 
1 голос
/ 19 сентября 2019

Я думаю, вы можете использовать оператор ? для jsonb типа:

select *
from (
    select '["1","2"]' union all
    select '["0"]'
) as a(data)
where
    a.data::jsonb ? '1'

В общем, я бы рассмотрел сохранение ваших данных как jsonb вместо строки.

db<>fiddle example

...