2016-08-04 16 views
12

Was ist der Unterschied zwischen ->> und -> in SQL?Was ist der Unterschied zwischen `- >>` und `->` in Postgres SQL?

In diesem Thread (Check if field exists in json type column postgresql), im Grunde der Antworter empfiehlt Verwendung

json->'attribute' is not null 

statt,

json->>'attribute' is not null 

Warum anstelle eines Doppelpfeils einen einzigen Pfeil benutzen? In meiner begrenzten Erfahrung machen beide dasselbe.

+4

[Hail zu der vergessenen Tugend, das feine Handbuch zu lesen.] (Https://www.postgresql.org/docs/current/static/functions-json.html) –

Antwort

8

-> kehrt json(b) und ->> kehrt text:

with t (jo, ja) as (values 
    ('{"a":"b"}'::jsonb,('[1,2]')::jsonb) 
) 
select 
    pg_typeof(jo -> 'a'), pg_typeof(jo ->> 'a'), 
    pg_typeof(ja -> 1), pg_typeof(ja ->> 1) 
from t 
; 
pg_typeof | pg_typeof | pg_typeof | pg_typeof 
-----------+-----------+-----------+----------- 
jsonb  | text  | jsonb  | text 
+0

Sie meinen wahrscheinlich, dass der erste Operator 'jsonb' zurückgibt (und nicht 'json (b)'). –

+2

@AlexanderFarber Ich meine, es kann beide JSON und JSONB daher die Klammer –

2

PostgreSQL bietet zwei einheimischen Betreibern -> und ->> Sie JSON-Daten helfen abfragen.

Der Operator -> gibt das JSON-Objektfeld als JSON zurück. Der Operator ->> gibt das JSON-Objektfeld als Text zurück.

Die folgende Abfrage verwendet Operator -> alle Kunden in Form von JSON zu bekommen:

enter image description here

Und die folgende Abfrage verwendet Operator ->> alle Kunden in Form von Text zu erhalten:

enter image description here

Sie können mehr Details in der Verbindung unten sehen http://www.postgresqltutorial.com/postgresql-json/

+0

Bitte tun [nicht als Bild PLZ] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload- Bilder-von-Code-auf-so-wenn-eine-Frage fragend/285557) –