Postgresql:使用jsonb字段查询时间范围

标签 postgresql jsonb

我有一个包含两个字段的表:

id(serial), data(jsonb)

在数据中,我有一个日期时间字段存储为 UNIX 时间戳的记录:

{"Device":132,"Datetime": 1434166552,...}

我正在尝试在范围之间查询:

SELECT *
FROM trips
WHERE data->>'Datetime' BETWEEN
    EXTRACT(EPOCH FROM date '2014-04-01') AND
    EXTRACT(EPOCH FROM date '2014-04-15' + interval '1 day')
    AND id = 123

留言

ERROR:  operator does not exist: text >= double precision
LINE 3: WHERE data->>'Datetime' BETWEEN

我做错了什么,请云有人帮助我吗?谢谢。

最佳答案

->> 运算符返回一个 JSON 对象字段作为 text(参见 here)。你需要施放它:

SELECT *
FROM trips
WHERE (data->>'Datetime')::int 
  BETWEEN EXTRACT(EPOCH FROM date '2014-04-01') 
      AND EXTRACT(EPOCH FROM date '2014-04-15' + interval '1 day')
  AND id = 123

关于Postgresql:使用jsonb字段查询时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30836025/

相关文章:

sql - 对 CASE WHEN SQL 的结果执行多值 LIKE

postgresql - 批量插入记录 Slick

postgresql jsonb 在对象中查找键

sql - 如何保证一张表恰好只有一行一列?

postgresql - aiopg/psycopg2 自动提交和事务

postgresql - 删除子分区表时出现死锁

sql - 从 JSONB 字段中正确提取 JSON 数组

python - 使用 Python 将 JSON 对象导入 Postgresql

sql - 如何聚合 postgres 中的 jsonb 元素行?

postgresql - 从一个表中复制值并将其插入到另一个 jsonb 字段