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)
주의:
- JSONB 오브젝트와 유일한 필드가 포함되어 있습니다.
member
무효입니다. - JSONB 오브젝트와 유일한 필드가 포함되어 있습니다.
member
숫자 값이 있습니다.12
- 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_null
json-displicate 조건만 취득할 수 있습니다.
언급URL : https://stackoverflow.com/questions/38777535/what-is-the-difference-between-and-in-postgres-sql
'programing' 카테고리의 다른 글
JSONP 요청 처리 오류 (0) | 2023.03.07 |
---|---|
RewriteRule에서 폴더/디렉토리 제외 (0) | 2023.03.07 |
반응형 Spring Web Client - SOAP 콜 발신 (0) | 2023.03.02 |
WooCommerce 3+에서 후크를 통해 제품 가격 변경 (0) | 2023.03.02 |
종료 코드 1 Spring Boot Intellij로 프로세스가 종료되었습니다. (0) | 2023.03.02 |