1

次のようなjson列フィールドがあるとしましょう:

 {phone: 5555555555, address: "55 awesome street", hair_color: "green"}

私がやりたいことは、json キー phone が存在するすべてのエントリを更新することであり、結果は number 型で文字列になります。

私が持っているものは次のとおりです。

 SELECT *
 FROM parent_object
 WHERE (fields->'phone') IS NOT NULL;

残念ながら、これはまだ値を返しますphone:nullnullJSONは SQL と同等ではないと推測していますNULL

どうすればよいですか 1) JSON の null AND (fields->'phone') <> nullが生成されることを除外するにはどうすればよいですか

 LINE 4: ...phone') IS NOT NULL AND (fields->'phone') <> 'null';
 HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

2)そのキー、この擬似コードの値のタイプを確認します(type_of (fields->'phone') == Integer)が、PGSQL が動作しています。

3)これを変更して列を更新します

 UPDATE parent_object
 SET fields.phone = to_char(fields.phone)
 WHERE  query defined above
4

1 に答える 1

1
  1. 他の人が言ったように、変数を文字列にキャストするためだけに変数を整数に変換する理由はありません。また、電話番号は数字ではありません。:-)

  2. ->>の代わりに演算子を使用する必要があります->。それと並んでIS NOT NULL、SELECTクエリが機能します。

    このクエリを実行した後、2 つのタプル値の違いに注意してください。

    SELECT fields->'phone', fields->>'phone'
    FROM parent_object;
    

    あなたの作業クエリ:

    SELECT *
    FROM parent_object
    WHERE (fields->>'phone') IS NOT NULL;
    
  3. Postgres は現在、JSON 列内の個々のキーをアトミックに更新することをネイティブにサポートしていません。ラッパー UDF を記述して、この機能を提供できます:新しい PostgreSQL JSON データ型内のフィールドを変更するにはどうすればよいですか?

于 2014-11-18T17:24:31.120 に答える