sql >> Database teknologi >  >> RDS >> PostgreSQL

Operatøren findes ikke:json =json

Kort sagt - brug JSONB i stedet for JSON eller cast JSON til JSONB.

Du kan ikke sammenligne json-værdier. Du kan sammenligne tekstværdier i stedet:

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

Bemærk dog, at værdier af typen JSON gemmes som tekst i et format, som de er angivet i. Resultatet af sammenligning afhænger således af, om du konsekvent anvender det samme format:

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

I Postgres 9.4+ kan du løse dette problem ved at bruge typen JSONB, som er gemt i et dekomponeret binært format. Værdier af denne type kan sammenlignes:

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

så denne forespørgsel er meget mere pålidelig:

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

Læs mere om JSON-typer.




  1. HEXTORAW() Funktion i Oracle

  2. Azure Virtual Machines til SQL Server-brug

  3. Brug af MySQL-klientapplikationer

  4. MySQL Database Service – Nye HeatWave-innovationer