2015-01-07 2 views
2

PostgreSQL 9.4를 사용하면 비교 연산자를 사용하여 JSON 데이터 유형에서 숫자 값을 찾을 수 있습니까? 예 : JSON 열의 age 속성이 18보다 우수한 모든 레코드를 제공합니까?PostgreSQL JSON 유형 및 쿼리

CREATE TABLE data 
(
    id serial NOT NULL, 
    attributes jsonb 
); 

INSERT INTO data (id, attributes) VALUES (1, '{"name": "Value A", "value": 20}'); 
INSERT INTO data (id, attributes) VALUES (2, '{"name": "Value B", "value": 10}'); 
나는 "값"모든 기록을 얻기 위해이 테이블을 쿼리하는 방법을 알고 싶습니다

는 특성이 우수 본 경우

18은, ID 1 기록은 단지 결과 일 것이다.

SELECT * from data WHERE attributes->>'value' = '10'; 

어떻게 숫자를 다루는 :

평등하고있다 (그러나 문자열 비교입니다)?

SELECT * from data WHERE attributes->>'value' > 18; 
==> ERROR: operator does not exist: text > integer 

SELECT * from data WHERE attributes->>'value'::integer > 18; 
==> ERROR: invalid input syntax for integer: "value" 

감사합니다.

답변

3

:: 캐스트 연산자 (. 제외) 평가 우선 순위에서 거의 모든 다른 연산자를 앞에, 그래서 당신은 괄호 추가 할 :

SELECT * from data WHERE (attributes->>'value')::integer > 18; 

표준을 준수하는 대안을 :

SELECT * from data WHERE cast(attributes->>'value' AS integer) > 18; 
+0

감사합니다 @ daniel- vérité !! –