sql >> データベース >  >> RDS >> PostgreSQL

jsonbメンバーからの整数列の更新は次のように失敗します:列は整数型ですが、式はjsonb型です

    単一のセットベースのSQLコマンドは、ループするよりもはるかに効率的です。

    UPDATE words_social w
    SET    social = (iu->>'social')::int
    FROM   JSONB_ARRAY_ELEMENTS(in_users) iu  -- in_user = function variable
    WHERE  w.sid = iu->>'sid';                -- type of sid?
    

    元の質問に答えるには:

    jsonbを変換しようとしていたため integerへの値 。あなたのソリューションでは、->>が必要であることがすでにわかっています。 ->の代わりに演算子 textを抽出するには 、integerにキャストできます 。

    2回目の試行で2番目のエラーが追加されました:

    t->'social'::int

    上記に加えて:演算子の優先順位 。キャスト演算子:: json演算子->よりも強力にバインドします 。あなたがすでに自分自身を見つけたように、あなたは本当に欲しいです:

    (t->>'social')::int
    

    dba.SEの非常によく似たケース:



    1. MySQL基準でのサブストリングの使用

    2. 同じテーブルの同じ行の別の列に行の複数の列の合計を格納するにはどうすればよいですか?

    3. MySQLでデフォルトの制約を追加する方法

    4. Oracle正規表現の最後の出現からの文字列の分割