2016-08-04 17 views
12

Jaka jest różnica między ->> i -> w SQL?Jaka jest różnica między `- >>` a `->` w Postgres SQL?

W tym wątku (Check if field exists in json type column postgresql), to w zasadzie odpowiadającego zaleca stosowanie,

json->'attribute' is not null 

zamiast,

json->>'attribute' is not null 

Dlaczego używać jednego strzałkę zamiast podwójnej strzałki? W moim ograniczonym doświadczeniu obie robią to samo.

+4

[Witaj w zapomnianej cnocie "Czytanie dobrego podręcznika."] (Https://www.postgresql.org/docs/current/static/functions-json.html) –

Odpowiedz

8

-> powraca json(b) i ->> powraca 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

Prawdopodobnie oznacza to, że pierwszy operator zwraca 'jsonb' (a nie 'json (b)'). –

+2

@AlexanderFarber Chodzi mi o to, że może zwracać zarówno json, jak i jsonb, stąd nawias –

2

PostgreSQL posiada dwa rodzimych operatorów -> i ->> pomóc kwerendy danych JSON.

Operator obiektu pole JSON -> powraca JSON. Operator ->> zwraca pole obiektu JSON jako tekst.

Poniższe zapytanie wykorzystuje operator -> uzyskać wszystkich klientów w postaci JSON:

enter image description here

A poniższa kwerenda używa operatora ->> uzyskać wszystkich klientów w postaci tekstu:

enter image description here

Możesz zobaczyć więcej szczegółów w linku poniżej http://www.postgresqltutorial.com/postgresql-json/

+0

Proszę nie pisać kodu jako obrazów] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload- images-of-code-on-so-when-asking-a-question/285557) –