PostgreSQL过滤器中混合了布尔值和JSON值的JSON列

时间:2018-09-06 17:22:48

标签: sql json postgresql

我的模式如下:

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 :(得分:1)

您的false值不是boolean,而是varcharinsert 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';