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

演算子が存在しません:json =json

    つまり、JSONの代わりにJSONBを使用するか、JSONをJSONBにキャストします。

    json値を比較することはできません。代わりにテキスト値を比較できます:

    SELECT * 
    FROM movie_test 
    WHERE tags::text = '["dramatic","women","political"]'
    

    ただし、JSONタイプの値は、指定された形式のテキストとして保存されることに注意してください。したがって、比較の結果は、同じ形式を一貫して適用するかどうかによって異なります。

    SELECT 
        '["dramatic" ,"women", "political"]'::json::text =  
        '["dramatic","women","political"]'::json::text      -- yields false!
        
    

    Postgres 9.4以降では、分解されたバイナリ形式で保存されているタイプJSONBを使用してこの問題を解決できます。このタイプの値を比較できます:

    SELECT 
        '["dramatic" ,"women", "political"]'::jsonb =  
        '["dramatic","women","political"]'::jsonb           -- yields true
    

    したがって、このクエリの信頼性ははるかに高くなります:

    SELECT * 
    FROM movie_test 
    WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb
    

    JSONタイプの詳細をご覧ください。




    1. OracleSQLでの文字の出現回数のカウント

    2. 最初にEFコードを使用して複合キーをマッピングする

    3. MySQLインデックスはどのように機能しますか?

    4. SQLite挿入