programing

Postgres SQL의 '->>'과 '->'의 차이점은 무엇입니까?

lastmemo 2023. 3. 2. 21:57
반응형

Postgres SQL의 '->>'과 '->'의 차이점은 무엇입니까?

와의 차이는 무엇입니까?->>그리고.->SQL에 있나요?

스레드(json type column postgresql에 필드가 있는지 확인)에서 응답자는 기본적으로 다음을 사용할 것을 권장합니다.

json->'attribute' is not null

대신,

json->>'attribute' is not null

왜 이중 화살표 대신 단일 화살표를 사용하는가?내 경험상, 둘 다 같은 일을 한다.

->json(또는 jsonb)을 반환하고->>돌아온다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

PostgreSQL은 2개의 네이티브 연산자를 제공합니다.->그리고.->>JSON 데이터를 조회할 수 있습니다.

오퍼레이터->는 JSON 오브젝트필드를 JSON으로 반환합니다.오퍼레이터->>JSON 오브젝트필드를 텍스트로 반환합니다.

다음 쿼리는 연산자를 사용합니다.->JSON 형식으로 모든 고객을 확보하려면:

SELECT
 info -> 'customer' AS customer
FROM
 orders;
customer
--------
"John Doe"
"Lily Bush"
"Josh William"
"Mary Clark"

다음 쿼리는 연산자를 사용합니다.->>텍스트 형식으로 모든 고객을 확보하려면:

SELECT
 info ->> 'customer' AS customer
FROM
 orders;
customer
--------
John Doe
Lily Bush
Josh William
Mary Clark

자세한 내용은 http://www.postgresqltutorial.com/postgresql-json/ 를 참조해 주세요.

Postgres는 JSON 멤버를 취득하기 위한 2개의 오퍼레이터를 제공합니다.

  • 화살표 연산자:->유형 JSON 또는 JSONB를 반환합니다.
  • 이중 화살표 연산자:->>type text를 반환한다.

또, 다음의 2종류의 null이 있는 것도 이해해 둘 필요가 있습니다.

  • 8 포스트그레스 늘타입
  • null json/b null 유형

jsfiddle에서 예를 만들었습니다.

JSONB 필드를 사용하여 간단한 테이블을 만듭니다.

create table json_test (
  id integer,
  val JSONB
);

몇 가지 테스트 데이터를 삽입합니다.

INSERT INTO json_test (id, val) values
(1, jsonb_build_object('member', null)),
(2, jsonb_build_object('member', 12)),
(3, null);

출력은 sqlfiddle로 표시됩니다.

id  | val
----+-----------------
 1  | {"member": null}
 2  | {"member": 12}
 3  | (null)

주의:

  1. JSONB 오브젝트와 유일한 필드가 포함되어 있습니다.member무효입니다.
  2. JSONB 오브젝트와 유일한 필드가 포함되어 있습니다.member숫자 값이 있습니다.12
  3. is (null): 즉, 열 전체가 (null)이며 JSONB 오브젝트가 전혀 포함되어 있지 않습니다.

차이점을 더 잘 이해하기 위해 유형 및 늘체크를 살펴보겠습니다.

SELECT id,
  val -> 'member'  as arrow,
  pg_typeof(val -> 'member')  as arrow_pg_type,
  val -> 'member' IS NULL as arrow_is_null,
  val ->> 'member' as dbl_arrow,
  pg_typeof(val ->> 'member')  as dbl_arrow_pg_type,
  val ->> 'member' IS NULL as dbl_arrow_is_null,
  CASE WHEN jsonb_typeof(val -> 'member') = 'null' THEN true ELSE false END as is_json_null
from json_test;

출력:

아이디 화살표 arrow_pg_type arrow_is_controls(화살표) dbl_displays(데이터베이스) dbl_module_pg_type dbl_dis_dis_dis_dis_dis is_json_n울
1 무효 jsonb 거짓의 (표준) 본문 진실의 진실의
2 12 jsonb 거짓의 12 본문 거짓의 거짓의
3 (표준) jsonb 진실의 (표준) 본문 진실의 거짓의

주의:

  • 위해서{"member": null}:
    • val -> 'member' IS NULL거짓이다
    • val ->> 'member' IS NULL맞다
  • is_json_nulljson-displicate 조건만 취득할 수 있습니다.

언급URL : https://stackoverflow.com/questions/38777535/what-is-the-difference-between-and-in-postgres-sql

반응형