【问题标题】:How can I do less than, greater than in JSON Postgres fields?如何在 JSON Postgres 字段中做小于、大于?
【发布时间】:2017-06-13 21:14:14
【问题描述】:

如果我有一些 json:

id = 1, json = {'key':95}
id = 2, json = {'key':90}
id = 3, json = {'key':50}

有没有一种方法可以使用 Postgres 字段来查询大于 >= 90 的键?

【问题讨论】:

    标签: postgresql jsonb


    【解决方案1】:

    使用运算符->>(Get JSON object field as text),例如

    with my_table(id, json) as (
    values
    (1, '{"key":95}'::json),
    (2, '{"key":90}'),
    (3, '{"key":50}')
    )
    
    select *
    from my_table
    where (json->>'key')::int >= 90;
    
     id |    json    
    ----+------------
      1 | {"key":95}
      2 | {"key":90}
    (2 rows)    
    

    【讨论】:

    • 如果“json”是一个键对象数组,例如 [{"key":95},{"key":9},{"key":13},{"key" :1}] 并且您想从 my_table 返回一个实体,该实体至少有一个大于 13 的键值?我在这里尝试了很多东西,但我并没有真正达到结果:(
    • 使用jsonb_array_elements(json)取消嵌套json数组元素,见dbfiddle.uk/…
    【解决方案2】:

    如果您使用 postgres 版本 >= 9.3,那么您可以:

    select * from t
    where (json->>'key')::numeric >= 90
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-05
      • 2020-08-31
      • 2016-04-17
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多