7

私は2つのフィールドを持つテーブルを持っています:

id(serial), data(jsonb)

データには、UNIX タイムスタンプとして保存された Datetime フィールドを持つレコードがあります。

{"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

私が何か間違ったことをしています。誰か助けてください。ありがとう。

4

1 に答える 1

6

この->>演算子は、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
于 2015-06-15T01:01:04.057 に答える