2

データベース テーブル (a_table) に jsonb フィールドがあり、その中に int 値があります。

{
  "abc":{
       "def":{
            "ghk":500
        }
   }
}

WHERE 句を使用して、このフィールド ("ghk") によるフィルターで SELECT を作成しようとしています。

SELECT * FROM a_table WHERE ghk BETWEEN 0 AND 1000;

このようなクエリを作成するにはどうすればよいですか? これまでのところ、jsonb の使用に関する適切なチュートリアルが見つかりませんでした。

前もって感謝します!

編集 私はこの解決策を見つけました:

SELECT * FROM a_table WHERE a_field #> '{abc,def,ghk}' BETWEEN '0' AND '10000' ;

それが正しいか?

4

1 に答える 1

4

#>、 にキャストできない JSONB ドキュメントを返しますint#>> 整数にキャストできるスカラー値を返す演算子が必要です。

select *
from a_table
where (json_col #>> '{abc,def,ghk}')::int between 0 and 1000

すべての JSON 演算子はマニュアルに記載されています: http://www.postgresql.org/docs/current/static/functions-json.html

これは数値比較ではなく文字列比較を行うため、使用BETWEEN '0' AND '10000'はお勧めできません。値が ~ の間にあり'2'ません。そのため、正しい比較を行うには、戻り値を数値にキャストする必要があります。'0''10000'

于 2015-04-30T10:19:45.463 に答える