代码之家  ›  专栏  ›  技术社区  ›  Babken Vardanyan

PostgreSQL筛选JSON列,其中包含布尔值和JSON值的混合值

  •  0
  • Babken Vardanyan  · 技术社区  · 6 年前

    我的架构如下所示:

    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行。

    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 回复  |  直到 6 年前
        1
  •  1
  •   Heiko Jakubzik    6 年前

    你的价值观不是假的 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';