Столбец JSON фильтра PostgreSQL со смешанными логическими и JSON-значениями - PullRequest
0 голосов
/ 06 сентября 2018

Моя схема выглядит так:

create table mytable
(
    id integer not null,
    value json not null
);

И столбец value содержит смешанные данные, как JSON, так и логические значения, подобные этому:

id | value
----------
 1 | {"key1": 1, "key2": 2}
 2 | false
 3 | {"key2": 3}
 4 | true

Эти смешанные значения хорошо принимаются PostgreSQL.

Теперь я хочу выбрать все строки, которые либо содержат некоторые данные json, либо true. То есть Я хочу выбрать строки 1, 3 и 4.

Вот SQL-запрос, который я мог бы придумать:

SELECT mytable.value
FROM mytable
WHERE CAST(CAST(mytable.value AS TEXT) AS BOOLEAN) IS NOT false;

Но с этим сообщением ничего не получается:

ERROR: argument of IS NOT FALSE must be type boolean, not type json

1 Ответ

0 голосов
/ 06 сентября 2018

Ваше значение false не boolean, а varchar (insert into mytable (id, value) values (4, true); не удается, а insert into mytable (id, value) values (4, 'true'); работает нормально). Вы можете выбрать все значения, которые не 'false', например:

SELECT mytable.value FROM mytable WHERE mytable.value::text != 'false'; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...