我的模式如下:
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
答案 0 :(得分:1)
您的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';