2015-06-15 111 views
3

我有兩個字段的表:PostgreSQL的:之間的時間範圍內查詢使用jsonb場

id(serial), data(jsonb) 

而進入數據我有一個存儲爲UNIX時間戳時間字段記錄:

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

我「M試圖範圍之間來查詢:

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 

我做錯了什麼,請雲有人幫助我?謝謝。

回答

4

->>運算符返回一個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 
+0

爲什麼不data'json - >>'Datetime''? –

+0

我不知道我明白。 'data'已經是'json'(或者'jsonb',但是這裏沒有改變任何東西),那麼':: json'會做什麼? – Marth

+0

我以爲它會返回整數,因爲' - >>'是int? –