Postgresql: запрос между временным диапазоном с использованием поля jsonb

У меня есть таблица с двумя полями:

id(serial), data(jsonb)

И в данные у меня есть записи с полем Datetime, хранящиеся в виде временных меток 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

Что-то я делаю не так, пожалуйста, облако, кто-нибудь, помогите мне? Спасибо.


person Goku    schedule 15.06.2015    source источник


Ответы (1)


Оператор ->> возвращает поле объекта JSON как text (см. здесь ). Вам нужно бросить его:

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
person Marth    schedule 15.06.2015
comment
Почему не data::json->>'Datetime' ? - person Leonel Sarmiento; 15.06.2015
comment
Я не уверен, что понимаю. data уже является json (или jsonb, но здесь это ничего не меняет), что будет делать ::json? - person Marth; 15.06.2015
comment
Я думал, что он вернет целое число, потому что ->> - это int? - person Leonel Sarmiento; 15.06.2015
comment
Оператор json/jsonb ->> возвращает text (см. ссылку в ответе). - person Marth; 15.06.2015