지원되는 버전:현재 (18) / 17 / 16 / 15 / 14
개발 버전:개발
지원되지 않는 버전:13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2

9.16. 롤 토토 함수 및 연산자#

이 섹션에서는 다음을 설명합니다.

  • 롤 토토 데이터 처리 및 생성을 위한 함수 및 연산자

  • SQL/롤 토토 경로 언어

SQL 환경 내에서 롤 토토 데이터 유형에 대한 기본 지원을 제공하려면,포스트그레SQL다음을 구현합니다SQL/롤 토토 데이터 모델. 이 모델은 일련의 항목으로 구성됩니다. 각 항목은 추가 SQL/롤 토토 null 값과 롤 토토 배열 및 개체를 사용하는 복합 데이터 구조를 포함한 SQL 스칼라 값을 보유할 수 있습니다. 모델은 롤 토토 사양에 포함된 데이터 모델을 형식화한 것입니다.RFC 7159.

SQL/롤 토토을 사용하면 다음을 포함한 트랜잭션 지원을 통해 일반 SQL 데이터와 함께 롤 토토 데이터를 처리할 수 있습니다.

  • 롤 토토 데이터를 데이터베이스에 업로드하고 이를 일반 SQL 열에 문자 또는 바이너리 문자열로 저장합니다.

  • 관계형 데이터에서 롤 토토 개체 및 배열 생성.

  • SQL/롤 토토 쿼리 함수 및 SQL/롤 토토 경로 언어 표현식을 사용하여 롤 토토 데이터 쿼리.

SQL/롤 토토 표준에 대해 자세히 알아보려면 다음을 참조하세요.[sqltr-19075-6]. 지원되는 롤 토토 유형에 대한 자세한 내용은포스트그레SQL, 참조섹션 8.14.

9.16.1. 롤 토토 데이터 처리 및 생성#

표 9.45롤 토토 데이터 유형과 함께 사용할 수 있는 연산자를 표시합니다(참조섹션 8.14). 또한, 다음과 같은 일반적인 비교 연산자는표 9.1다음에 사용할 수 있습니다.롤 토토b, 하지만롤 토토. 비교 연산자는 다음에 설명된 B-트리 작업의 순서 규칙을 따릅니다.섹션 8.14.4. 또한 참조하세요PostgreSQL : 문서 : 16 : 9.21. 스포츠 토토 베트맨 기능집계 함수용롤 토토_agg레코드 값을 집계 함수인 롤 토토으로 집계합니다.롤 토토_object_agg값 쌍을 롤 토토 객체로 집계하고 해당롤 토토b등가물,롤 토토b_agg그리고롤 토토b_object_agg.

표 9.45. 롤 토토그리고롤 토토b연산자

운영자

설명

예제

롤 토토 - 정수롤 토토

롤 토토b - 정수롤 토토b

추출물n롤 토토 배열의'번째 요소(배열 요소는 0부터 색인이 생성되지만 음의 정수는 끝부터 계산됩니다.)

'["a":"foo","b":"bar","c":"baz"]'::롤 토토 - 2"c":"baz"

'["a":"foo","b":"bar","c":"baz"]'::롤 토토 - -3"a":"foo"

롤 토토 - 텍스트롤 토토

롤 토토b - 텍스트롤 토토b

주어진 키로 롤 토토 개체 필드를 추출합니다.

'"a": "b":"foo"'::롤 토토 - 'a'"b":"foo"

롤 토토 - 정수텍스트

롤 토토b - 정수텍스트

추출물n롤 토토 배열의 '번째 요소, 다음과 같이텍스트.

'[1,2,3]'::롤 토토 - 23

롤 토토 - 텍스트텍스트

롤 토토b - 텍스트텍스트

다음과 같이 주어진 키를 사용하여 롤 토토 개체 필드를 추출합니다.텍스트.

'"a":1,"b":2'::롤 토토 - 'b'2

롤 토토 # 텍스트[]롤 토토

롤 토토b # 텍스트[]롤 토토b

지정된 경로에서 롤 토토 하위 개체를 추출합니다. 여기서 경로 요소는 필드 키 또는 배열 인덱스일 수 있습니다.

'"a": "b": ["foo","bar"]'::롤 토토 # 'a,b,1'"바"

롤 토토 # 텍스트[]텍스트

롤 토토b # 텍스트[]텍스트

지정된 경로에서 롤 토토 하위 개체를 다음과 같이 추출합니다.텍스트.

'"a": "b": ["foo","bar"]'::롤 토토 # 'a,b,1'


참고

필드/요소/경로 추출 연산자는 롤 토토 입력에 요청과 일치하는 올바른 구조가 없는 경우 실패하지 않고 NULL을 반환합니다. 예를 들어 해당 키나 배열 요소가 없는 경우입니다.

일부 추가 연산자는 다음 용도로만 존재합니다.롤 토토b, 다음과 같이표 9.46. 섹션 8.14.4이러한 연산자를 사용하여 색인을 효과적으로 검색하는 방법을 설명합니다.롤 토토b데이터.

표 9.46. 추가롤 토토b운영자

운영자

설명

롤 토토b @ 롤 토토b부울

첫 번째 롤 토토 값에 두 번째 값이 포함되어 있습니까? (참조섹션 8.14.3격리에 대한 자세한 내용은.)

'"a":1, "b":2'::롤 토토b @ '"b":2'::롤 토토bt

롤 토토b <@ 롤 토토b부울

첫 번째 롤 토토 값이 두 번째 값에 포함되어 있습니까?

'"b":2'::롤 토토b <@ '"a":1, "b":2'::롤 토토bt

롤 토토b ? 텍스트부울

텍스트 문자열이 롤 토토 값 내에서 최상위 키 또는 배열 요소로 존재합니까?

'"a":1, "b":2'::롤 토토b ? '비't

'["a", "b", "c"]'::롤 토토b ? '비't

롤 토토b ?| 텍스트[]부울

텍스트 배열의 문자열 중 최상위 키 또는 배열 요소로 존재하는 문자열이 있습니까?

'"a":1, "b":2, "c":3'::롤 토토b ?| 배열['b', 'd']t

롤 토토b ?& 텍스트[]부울

텍스트 배열의 모든 문자열이 최상위 키 또는 배열 요소로 존재합니까?

'["a", "b", "c"]'::롤 토토b ?& 배열['a', 'b']t

롤 토토b || 롤 토토b롤 토토b

두 개를 연결합니다롤 토토b값. 두 배열을 연결하면 각 입력의 모든 요소를 ​​포함하는 배열이 생성됩니다. 두 개체를 연결하면 해당 키의 합집합을 포함하는 개체가 생성되며, 중복 키가 있는 경우 두 번째 개체의 값을 가져옵니다. 다른 모든 경우는 배열이 아닌 입력을 단일 요소 배열로 변환한 다음 두 개의 배열처럼 진행하여 처리됩니다. 재귀적으로 작동하지 않습니다. 최상위 배열 또는 객체 구조만 병합됩니다.

'["a", "b"]'::롤 토토b || '["a", "d"]'::롤 토토b["a", "b", "a", "d"]

'"a": "b"'::롤 토토b || '"c": "d"'::롤 토토b"a": "b", "c": "d"

'[1, 2]'::롤 토토b || '3'::롤 토토b[1, 2, 3]

'"a": "b"'::롤 토토b || '42'::롤 토토b["a": "b", 42]

배열을 다른 배열에 단일 항목으로 추가하려면 배열의 추가 레이어로 포장하십시오. 예:

'[1, 2]'::롤 토토b || 롤 토토b_build_array('[3, 4]'::롤 토토b)[1, 2, [3, 4]]

롤 토토b - 텍스트롤 토토b

롤 토토 개체에서 키(및 해당 값)를 삭제하거나 롤 토토 배열에서 일치하는 문자열 값을 삭제합니다.

'"a": "b", "c": "d"'::롤 토토b - 'a'"c": "d"

'["a", "b", "c", "b"]'::롤 토토b - 'b'["a", "c"]

롤 토토b - 텍스트[]롤 토토b

왼쪽 피연산자에서 일치하는 모든 키 또는 배열 요소를 삭제합니다.

'"a": "b", "c": "d"'::롤 토토b - 'a,c'::text[]{}

롤 토토b - 정수롤 토토b

지정된 인덱스를 가진 배열 요소를 삭제합니다(음의 정수는 끝부터 계산됩니다). 롤 토토 값이 배열이 아닌 경우 오류가 발생합니다.

'["a", "b"]'::롤 토토b - 1["a"]

롤 토토b #- 텍스트[]롤 토토b

지정된 경로에서 필드 또는 배열 요소를 삭제합니다. 여기서 경로 요소는 필드 키 또는 배열 인덱스일 수 있습니다.

'["a", "b":1]'::롤 토토b #- '1,b'["a", ]

롤 토토b @? 롤 토토path부울

롤 토토 경로는 지정된 롤 토토 값에 대한 항목을 반환합니까?

'"a":[1,2,3,4,5]'::롤 토토b @? '$.a[*] ? (@ 2)'t

롤 토토b @@ 롤 토토path부울

지정된 롤 토토 값에 대한 롤 토토 경로 조건자 검사 결과를 반환합니다. 결과의 첫 번째 항목만 고려됩니다. 결과가 부울이 아니면NULL반환되었습니다.

'"a":[1,2,3,4,5]'::롤 토토b @@ '$.a[*] 2't


참고

롤 토토path연산자@?그리고@@다음 오류를 억제합니다: 개체 필드 또는 배열 요소 누락, 예상치 못한 롤 토토 항목 유형, 날짜 시간 및 숫자 오류.롤 토토path27878_28060

표 9.47구성에 사용할 수 있는 함수를 표시롤 토토그리고롤 토토b값. 이 표의 일부 함수에는돌아오는 중28433_28502롤 토토, 롤 토토b, 바이테아, 문자열 유형(텍스트, 문자또는varchar) 또는 캐스트할 수 있는 유형롤 토토. 기본적으로는롤 토토유형이 반환되었습니다.

표 9.47. 롤 토토 생성 함수

기능

설명

예제

to_롤 토토 ( 모든 요소 ) → 롤 토토

to_롤 토토b ( 모든 요소 ) → 롤 토토b

모든 SQL 값을 다음으로 변환합니다.롤 토토또는롤 토토b. 배열과 복합물은 반복적으로 배열과 객체로 변환됩니다(다차원 배열은 롤 토토에서 배열의 배열이 됩니다). 그렇지 않고 SQL 데이터 유형에서 다음으로 캐스트가 있는 경우롤 토토, 변환을 수행하기 위해 캐스트 함수가 사용됩니다.[a]그렇지 않으면 스칼라 롤 토토 값이 생성됩니다. 숫자, 부울 또는 null 값이 아닌 스칼라의 경우 유효한 롤 토토 문자열 값을 만들기 위해 필요에 따라 이스케이프하여 텍스트 표현이 사용됩니다.

to_롤 토토('프레드가 "안녕하세요."라고 말했습니다.'::text)"프레드가 \"안녕\"이라고 말했습니다."

to_롤 토토b(row(42, '프레드가 "안녕하세요."라고 말했습니다.'::text))"f1": 42, "f2": "프레드가 \"안녕\"이라고 말했습니다."

array_to_롤 토토 ( 임의 배열 [, 부울 ] ) → 롤 토토

SQL 배열을 롤 토토 배열로 변환합니다. 동작은 다음과 같습니다.to_롤 토토단, 선택적 부울 매개변수가 true인 경우 최상위 배열 요소 사이에 줄 바꿈이 추가됩니다.

array_to_롤 토토('1,5,99,100'::int[])[[1,5],[99,100]]

롤 토토_array ( [ { 값_표현 [ 롤 토토 형식 ] } [, ...] ] [ { NULL | 부재 } ON NULL ] [ 돌아오는 중 데이터_유형 [ 롤 토토 형식 [ UTF8 인코딩 중 ] ] ])

롤 토토_array ( [ 쿼리_표현 ] [ 돌아오는 중 데이터_유형 [ 롤 토토 형식 [ UTF8 인코딩 중 ] ] ])

다음 시리즈 중 하나에서 롤 토토 배열을 구성합니다.값_표현매개변수 또는 결과에서쿼리_표현, 단일 열을 반환하는 SELECT 쿼리여야 합니다. 만일NULL일 때 부재을 지정하면 NULL 값은 무시됩니다. 다음과 같은 경우에는 항상 그렇습니다.쿼리_표현사용됩니다.

롤 토토_array(1,true,롤 토토 '"a":null')[1, 참, "a":null]

롤 토토_array(SELECT * FROM (VALUES(1),(2)) t)[1, 2]

row_to_롤 토토 ( 기록 [, 부울 ] ) → 롤 토토

SQL 복합 값을 롤 토토 개체로 변환합니다. 동작은 다음과 같습니다.to_롤 토토단, 선택적 부울 매개변수가 true인 경우 최상위 요소 사이에 줄 바꿈이 추가됩니다.

row_to_롤 토토(row(1,'foo'))"f1":1,"f2":"foo"

롤 토토_build_array ( VARIADIC "아무거나" ) → 롤 토토

롤 토토b_build_array ( VARIADIC "아무거나" ) → 롤 토토b

가변 인수 목록에서 이종 유형의 롤 토토 배열을 구축합니다. 각 인수는 다음과 같이 변환됩니다.to_롤 토토또는to_롤 토토b.

롤 토토_build_array(1, 2, 'foo', 4, 5)[1, 2, "foo", 4, 5]

롤 토토_build_object ( VARIADIC "아무거나" ) → 롤 토토

롤 토토b_build_object ( VARIADIC "아무거나" ) → 롤 토토b

가변 인수 목록에서 롤 토토 개체를 만듭니다. 관례적으로 인수 목록은 교대로 키와 값으로 구성됩니다. 주요 인수는 텍스트로 강제 변환됩니다. 값 인수는 다음과 같이 변환됩니다.to_롤 토토또는to_롤 토토b.

롤 토토_build_object('foo', 1, 2, row(3,'bar'))"foo" : 1, "2" : "f1":3,"f2":"bar"

롤 토토_object ( [ { 키_표현 { | ':' } 값_표현 [ 롤 토토 형식 [ UTF8 인코딩 중 ] ] }[, ...] ] [ { NULL | 부재 } ON NULL ] [ { 함께 | 없이 } 고유 [ ] ] [ 돌아오는 중 데이터_유형 [ 롤 토토 형식 [ UTF8 인코딩 중 ] ] ])

주어진 모든 키/값 쌍의 롤 토토 개체를 구성하거나, 아무것도 제공되지 않은 경우 빈 개체를 구성합니다.키_표현는 다음을 정의하는 스칼라 표현식입니다.롤 토토키는로 변환됩니다.텍스트유형. 그럴 수는 없어NULL또한 캐스트가 있는 유형에 속할 수도 없습니다.롤 토토유형. 만일고유 키 사용지정되었습니다. 중복된 항목이 없어야 합니다.키_표현. 다음과 같은 모든 쌍은값_표현다음으로 평가됨NULL다음의 경우 출력에서 생략됩니다.NULL일 때 부재지정되었습니다. 만일NULL ON NULL이 지정되거나 절이 생략되면 키가 값에 포함됩니다.NULL.

롤 토토_object('코드' VALUE 'P123', '제목': '죠스')"코드" : "P123", "제목" : "죠스"

롤 토토_object ( 텍스트[] ) → 롤 토토

롤 토토b_object ( 텍스트[] ) → 롤 토토b

텍스트 배열에서 롤 토토 개체를 만듭니다. 배열에는 짝수의 멤버가 포함된 정확히 1차원(이 경우 대체 키/값 쌍으로 간주됨)이 있거나, 각 내부 배열에 정확히 2개의 요소가 포함되어 키/값 쌍으로 간주되는 2차원이 있어야 합니다. 모든 값은 롤 토토 문자열로 변환됩니다.

롤 토토_object('a, 1, b, "def", c, 3.5')"a" : "1", "b" : "def", "c" : "3.5"

롤 토토_object('a, 1, b, "def", c, 3.5')"a" : "1", "b" : "def", "c" : "3.5"

롤 토토_object ( 텍스트[], 텍스트[] ) → 롤 토토

롤 토토b_object ( 텍스트[], 텍스트[] ) → 롤 토토b

이 형태는롤 토토_object별도의 텍스트 배열에서 키와 값을 쌍으로 가져옵니다. 그 외에는 단일 인수 형식과 동일합니다.

롤 토토_object('a,b', '1,2')"a": "1", "b": "2"

[a]예를 들어,PostgreSQL : 문서 : 16 : F.18. 토토 커뮤니티 - 토토 커뮤니티 키/값 데이터 유형확장 프로그램이 다음에서 캐스트되었습니다.hstore롤 토토그러니까h스토어롤 토토 생성 함수를 통해 변환된 값은 기본 문자열 값이 아닌 롤 토토 개체로 표시됩니다.


표 9.48롤 토토 테스트를 위한 SQL/롤 토토 기능을 자세히 설명합니다.

표 9.48. SQL/롤 토토 테스트 함수

함수 서명

설명

표현 IS [ 아님 ] 롤 토토 [ { | 스칼라 | 어레이 | 객체 } ] [ { 함께 | 없이 } 고유 [ ] ]

이 술어는 다음을 테스트합니다.표현가능한 지정된 유형의 롤 토토으로 구문 분석될 수 있습니다. 만일스칼라또는어레이또는객체이 지정되면 테스트는 롤 토토이 해당 특정 유형인지 여부입니다. 만일고유 키 사용이 지정되면의 모든 개체가 지정됩니다.표현또한 중복 키가 있는지 확인하기 위해 테스트되었습니다.

JS 선택,
  js는 롤 토토 "롤 토토?"입니다.
  js는 롤 토토 SCALAR "스칼라?"입니까?
  js는 롤 토토 OBJECT "객체?"입니다.
  Node.js는 롤 토토 ARRAY "배열"인가요?
에서(값
      ('123'), ('"abc"'), ('"a": "b"'), ('[1,2]'),('abc')) foo(js);
     JS | 롤 토토? | 스칼라? | 물건? | 배열?
------------+-------+---------+---------+--------
 123 | 티 | 티 | 에프 | 에프
 "abc" | 티 | 티 | 에프 | 에프
 "a": "b" | 티 | 에프 | 티 | 에프
 [1,2] | 티 | 에프 | 에프 | 티
 ABC | 에프 | 에프 | 에프 | 에프
JS 선택,
  js는 롤 토토 OBJECT "객체?"입니다.
  Node.js는 롤 토토 ARRAY "배열?"입니다.
  Node.js는 고유 키가 있는 롤 토토 배열입니다. "영국 배열?"
  Node.js는 고유 키가 없는 롤 토토 배열입니다. "영국이 없는 배열인가요?"
FROM (값 ('["a":"1",
 "b":"2","b":"3"]')) foo(js);
-[ 기록 1 ]-+---------
JS | ["a":"1", +
              |  "b":"2","b":"3"]
물건?       | 에프
배열?        | 티
w 배열. 영국?  | 에프
영국이 없는 어레이? | 티

표 9.49처리에 사용할 수 있는 기능을 표시합니다.롤 토토그리고롤 토토b값.

표 9.49. 롤 토토 처리 함수

기능

설명

롤 토토_array_elements ( 롤 토토 ) → 롤 토토 집합

롤 토토b_array_elements ( 롤 토토b ) → 롤 토토b 집합

최상위 롤 토토 배열을 롤 토토 값 세트로 확장합니다.

롤 토토_array_elements('[1,true, [2,false]]')에서 * 선택

값
-----------
 1
 사실
 [2,거짓]

롤 토토_array_elements_text ( 롤 토토 ) → 텍스트 집합

롤 토토b_array_elements_text ( 롤 토토b ) → 텍스트 집합

최상위 롤 토토 배열을 다음 세트로 확장합니다.텍스트값.

롤 토토_array_elements_text('["foo", "bar"]')에서 * 선택

값
-----------
 푸
 바

롤 토토_array_length ( 롤 토토 ) → 정수

롤 토토b_array_length ( 롤 토토b ) → 정수

최상위 롤 토토 배열의 요소 수를 반환합니다.

롤 토토_array_length('[1,2,3,"f1":1,"f2":[5,6],4]')5

롤 토토b_array_length('[]')0

롤 토토_each ( 롤 토토 ) → 레코드 세트 ( 텍스트, 롤 토토 )

롤 토토b_each ( 롤 토토b ) → 레코드 세트 ( 텍스트, 롤 토토b )

최상위 롤 토토 개체를 키/값 쌍 세트로 확장합니다.

롤 토토_each('"a":"foo", "b":"bar"')에서 * 선택

키 | 가치
------+-------
 | "푸"
 비 | "바"

롤 토토_each_text ( 롤 토토 ) → 레코드 집합 ( 텍스트, 텍스트 )

롤 토토b_each_text ( 롤 토토b ) → 레코드 세트 ( 텍스트, 텍스트 )

최상위 롤 토토 개체를 키/값 쌍 세트로 확장합니다. 반환된s는 다음 유형이 됩니다.텍스트.

롤 토토_each_text('"a":"foo", "b":"bar"')에서 * 선택

키 | 가치
------+-------
 | 푸
 비 | 바

롤 토토_extract_path ( from_롤 토토 롤 토토, VARIADIC path_elems 텍스트[] ) → 롤 토토

롤 토토b_extract_path ( from_롤 토토 롤 토토b, VARIADIC path_elems 텍스트[] ) → 롤 토토b

지정된 경로에서 롤 토토 하위 개체를 추출합니다. (이것은 기능적으로 다음과 동일합니다.#연산자이지만 경로를 가변 목록으로 작성하는 것이 어떤 경우에는 더 편리할 수 있습니다.)

롤 토토_extract_path('"f2":"f3":1,"f4":"f5":99,"f6":"foo"', 'f4', 'f6')"foo"

롤 토토_extract_path_text ( from_롤 토토 롤 토토, VARIADIC path_elems 텍스트[] ) → 텍스트

롤 토토b_extract_path_text ( from_롤 토토 롤 토토b, VARIADIC path_elems 텍스트[] ) → 텍스트

지정된 경로에서 롤 토토 하위 개체를 다음과 같이 추출합니다.텍스트. (이것은 기능적으로 다음과 동일합니다.#연산자.)

롤 토토_extract_path_text('"f2":"f3":1,"f4":"f5":99,"f6":"foo"', 'f4', 'f6')foo

롤 토토_object_keys ( 롤 토토 ) → 텍스트 집합

롤 토토b_object_keys ( 롤 토토b ) → 텍스트 집합

최상위 롤 토토 객체의 키 세트를 반환합니다.

롤 토토_object_keys에서 * 선택('"f1":"abc","f2":"f3":"a", "f4":"b"')

롤 토토_object_keys
------------------
 f1
 f2

롤 토토_populate_record ( 베이스 모든 요소, from_롤 토토 롤 토토 ) → 모든 요소

롤 토토b_populate_record ( 베이스 모든 요소, from_롤 토토 롤 토토b ) → 모든 요소

최상위 롤 토토 개체를 복합 유형이 있는 행으로 확장합니다.베이스인수. 롤 토토 개체에서 이름이 출력 행 유형의 열 이름과 일치하는 필드를 검색하고 해당 값이 해당 출력 열에 삽입됩니다. (출력 열 이름과 일치하지 않는 필드는 무시됩니다.) 일반적인 사용에서는베이스그냥NULL, 즉 개체 필드와 일치하지 않는 모든 출력 열은 null로 채워집니다. 그러나 만일베이스아님NULL그러면 포함된 값은 일치하지 않는 열에 사용됩니다.

롤 토토 값을 출력 열의 SQL 유형으로 변환하려면 다음 규칙이 순서대로 적용됩니다.

  • 롤 토토 null 값은 모든 경우에 SQL null로 변환됩니다.

  • 출력 열이 유형인 경우롤 토토또는롤 토토b, 롤 토토 값이 정확하게 재현되었습니다.

  • 출력 열이 복합(행) 유형이고 롤 토토 값이 롤 토토 객체인 경우, 객체의 필드는 이러한 규칙의 재귀적 적용에 의해 출력 행 유형의 열로 변환됩니다.

  • 마찬가지로, 출력 열이 배열 유형이고 롤 토토 값이 롤 토토 배열인 경우 롤 토토 배열의 요소는 이러한 규칙을 재귀적으로 적용하여 출력 배열의 요소로 변환됩니다.

  • 그렇지 않으면 롤 토토 값이 문자열인 경우 문자열의 내용은 열의 데이터 유형에 대한 입력 변환 함수에 제공됩니다.

  • 그렇지 않으면 롤 토토 값의 일반 텍스트 표현이 열의 데이터 유형에 대한 입력 변환 함수에 제공됩니다.

아래 예에서는 상수 롤 토토 값을 사용하지만 일반적으로 다음을 참조하는 데 사용됩니다.롤 토토또는롤 토토b쿼리의 다른 테이블에서 측면으로 열발신절. 쓰기롤 토토_populate_record에서발신절은 중복된 함수 호출 없이 추출된 모든 열을 사용할 수 있으므로 좋은 습관입니다.

유형 하위 행 유형을 (d int, e text)로 생성; myrowtype 유형을 (a int, b text[], c 하위 행 유형)으로 생성;

select * from 롤 토토_populate_record(null::myrowtype, '"a": 1, "b": ["2", "a b"], "c": "d": 4, "e": "a b c", "x": "foo"')

a |   비 |      ㄷ
---+------------+-------------
 1 | 2,"a b" | (4,"a b c")

롤 토토_populate_recordset ( 베이스 모든 요소, from_롤 토토 롤 토토 ) → 모든 요소 집합

롤 토토b_populate_recordset ( 베이스 모든 요소, from_롤 토토 롤 토토b ) → 모든 요소의 집합

객체의 최상위 롤 토토 배열을 복합 유형을 갖는 행 세트로 확장합니다.베이스인수. 롤 토토 배열의 각 요소는 위에서 설명한 대로 처리됩니다.롤 토토[b]_populate_record.

(a int, b int)로 twoint 유형을 생성합니다.

롤 토토_populate_recordset에서 * 선택(null::twoints, '["a":1,"b":2, "a":3,"b":4]')

a | 비
---+---
 1 | 2
 3 | 4

롤 토토_to_record ( 롤 토토 ) → 기록

롤 토토b_to_record ( 롤 토토b ) → 기록

최상위 롤 토토 객체를 다음으로 정의된 복합 유형이 있는 행으로 확장합니다.AS절. (모든 함수가 반환되는 것과 마찬가지로기록, 호출 쿼리는 다음을 사용하여 레코드의 구조를 명시적으로 정의해야 합니다.AS절.) 출력 레코드는 위에 설명된 것과 동일한 방식으로 롤 토토 개체의 필드에서 채워집니다.롤 토토[b]_populate_record. 입력 레코드 값이 없으므로 일치하지 않는 열은 항상 null로 채워집니다.

myrowtype 유형을 (a int, b 텍스트)로 생성;

select * from 롤 토토_to_record('"a":1,"b":[1,2,3],"c":[1,2,3],"e":"bar","r": "a": 123, "b": "a b c"') as x(a int, b text, c int[], d text, r myrowtype)

a |    비 |    c | 디 |       아르
---+---------+---------+---+---------------
 1 | [1,2,3] | 1,2,3 |   | (123,"abc")

롤 토토_to_recordset ( 롤 토토 ) → 레코드 집합

롤 토토b_to_recordset ( 롤 토토b ) → 레코드 세트

객체의 최상위 롤 토토 배열을 다음으로 정의된 복합 유형이 있는 행 집합으로 확장합니다.AS절. (모든 함수가 반환되는 것과 마찬가지로기록, 호출 쿼리는를 사용하여 레코드의 구조를 명시적으로 정의해야 합니다.AS절.) 롤 토토 배열의 각 요소는 위에서 설명한 대로 처리됩니다.롤 토토[b]_populate_record.

롤 토토_to_recordset('["a":1,"b":"foo", "a":"2","c":"bar"]')에서 *를 x(a int, b text)로 선택

a |  비
---+-----
 1 | 푸
 2 |

롤 토토b_set ( 대상 롤 토토b, 경로 텍스트[], new_value 롤 토토b [, create_if_missing 부울 ] ) → 롤 토토b

반품대상다음이 지정한 항목으로경로다음으로 대체됨new_value또는new_value다음 경우에 추가됨create_if_missing는 true(기본값)이며 다음으로 지정된 항목입니다.경로존재하지 않습니다. 경로의 모든 이전 단계가 존재해야 합니다. 그렇지 않으면대상변경되지 않은 상태로 반환됩니다. 경로 지향 연산자와 마찬가지로,경로롤 토토 배열의 끝부터 계산합니다. 마지막 경로 단계가 범위를 벗어난 배열 인덱스인 경우 및create_if_missing이 true이면 새 값은 인덱스가 음수인 경우 배열의 시작 부분에 추가되고, 양수인 경우 배열의 끝에 추가됩니다.

롤 토토b_set('["f1":1,"f2":null,2,null,3]', '0,f1', '[2,3,4]', false)["f1": [2, 3, 4], "f2": null, 2, null, 3]

롤 토토b_set('["f1":1,"f2":null,2]', '0,f3', '[2,3,4]')["f1": 1, "f2": null, "f3": [2, 3, 4], 2]

롤 토토b_set_lax ( 대상 롤 토토b, 경로 텍스트[], new_value 롤 토토b [, create_if_missing 부울 [, null_value_treatment 텍스트 ]] ) → 롤 토토b

만약new_value아닙니다NULL, 다음과 동일하게 동작함롤 토토b_set. 그렇지 않으면 값에 따라 동작합니다.null_value_treatment다음 중 하나여야 합니다.'raise_Exception', 'use_롤 토토_null', 'delete_key'또는'return_target'. 기본값은'use_롤 토토_null'.

롤 토토b_set_lax('["f1":1,"f2":null,2,null,3]', '0,f1', null)["f1": null, "f2": null, 2, null, 3]

롤 토토b_set_lax('["f1":99,"f2":null,2]', '0,f3', null, true, 'return_target')["f1": 99, "f2": null, 2]

롤 토토b_insert ( 대상 롤 토토b, 경로 텍스트[], new_value 롤 토토b [, insert_after 부울 ] ) → 롤 토토b

반품대상함께new_value삽입되었습니다. 에서 지정한 항목인 경우경로은 배열 요소입니다.new_value다음의 경우 해당 항목 앞에 삽입됩니다insert_after는 false(기본값)이거나 그 이후인 경우insert_after사실입니다. 에서 지정한 항목인 경우경로객체 필드입니다.new_value개체에 해당 키가 아직 포함되어 있지 않은 경우에만 삽입됩니다. 경로의 모든 이전 단계가 존재해야 합니다. 그렇지 않으면대상변경되지 않은 상태로 반환됩니다. 경로 지향 연산자와 마찬가지로,경로롤 토토 배열의 끝부터 계산합니다. 마지막 경로 단계가 범위를 벗어난 배열 인덱스인 경우, 인덱스가 음수이면 배열의 시작 부분에 새 값이 추가되고, 양수이면 배열의 끝에 추가됩니다.

롤 토토b_insert('"a": [0,1,2]', 'a, 1', '"new_value"')"a": [0, "new_value", 1, 2]

롤 토토b_insert('"a": [0,1,2]', 'a, 1', '"new_value"', true)"a": [0, 1, "new_value", 2]

롤 토토_strip_nulls ( 롤 토토 ) → 롤 토토

롤 토토b_strip_nulls ( 롤 토토b ) → 롤 토토b

주어진 롤 토토 값에서 null 값을 갖는 모든 개체 필드를 반복적으로 삭제합니다. 개체 필드가 ​​아닌 Null 값은 그대로 유지됩니다.

롤 토토_strip_nulls('["f1":1, "f2":null, 2, null, 3]')["f1":1,2,null,3]

롤 토토b_path_exists ( 대상 롤 토토b, 경로 롤 토토path [, vars 롤 토토b [, 침묵 부울 ]] ) → 부울

롤 토토 경로가 지정된 롤 토토 값에 대한 항목을 반환하는지 확인합니다. 만약vars인수는 롤 토토 객체여야 하며 해당 필드는 다음으로 대체될 명명된 값을 제공합니다.롤 토토path식. 만약침묵인수가 지정되었으며 다음과 같습니다.사실, 이 함수는와 동일한 오류를 억제합니다.@?그리고@@연산자가 그렇습니다.

롤 토토b_path_exists('"a":[1,2,3,4,5]', '$.a[*] ? (@ = $min && @ <= $max)', '"min":2, "max":4')t

롤 토토b_path_match ( 대상 롤 토토b, 경로 롤 토토path [, vars 롤 토토b [, 침묵 부울 ]] ) → 부울

지정된 롤 토토 값에 대한 롤 토토 경로 조건자 검사 결과를 반환합니다. 결과의 첫 번째 항목만 고려됩니다. 결과가 부울이 아니면NULL반환되었습니다. 선택사항vars그리고침묵인수는 for와 동일하게 작동합니다.롤 토토b_path_exists.

롤 토토b_path_match('"a":[1,2,3,4,5]', 'exists($.a[*] ? (@ = $min && @ <= $max))', '"min":2, "max":4')t

롤 토토b_path_query ( 대상 롤 토토b, 경로 롤 토토path [, vars 롤 토토b [, 침묵 부울 ]] ) → 롤 토토b 집합

지정된 롤 토토 값에 대해 롤 토토 경로에서 반환된 모든 롤 토토 항목을 반환합니다. 선택사항vars그리고침묵인수는 for와 동일하게 작동합니다.롤 토토b_path_exists.

select * from 롤 토토b_path_query('"a":[1,2,3,4,5]', '$.a[*] ? (@ = $min && @ <= $max)', '"min":2, "max":4')

롤 토토b_path_query
------------------
 2
 3
 4

롤 토토b_path_query_array ( 대상 롤 토토b, 경로 롤 토토path [, vars 롤 토토b [, 침묵 부울 ]] ) → 롤 토토b

지정된 롤 토토 값에 대해 롤 토토 경로에서 반환된 모든 롤 토토 항목을 롤 토토 배열로 반환합니다. 선택사항vars그리고침묵인수는 for와 동일하게 작동합니다.롤 토토b_path_exists.

롤 토토b_path_query_array('"a":[1,2,3,4,5]', '$.a[*] ? (@ = $min && @ <= $max)', '"min":2, "max":4')[2, 3, 4]

롤 토토b_path_query_first ( 대상 롤 토토b, 경로 롤 토토path [, vars 롤 토토b [, 침묵 부울 ]] ) → 롤 토토b

지정된 롤 토토 값에 대해 롤 토토 경로에서 반환된 첫 번째 롤 토토 항목을 반환합니다. 반품NULL결과가 없는 경우. 선택사항vars그리고침묵인수는 for와 동일하게 작동합니다.롤 토토b_path_exists.

롤 토토b_path_query_first('"a":[1,2,3,4,5]', '$.a[*] ? (@ = $min && @ <= $max)', '"min":2, "max":4')2

롤 토토b_path_exists_tz ( 대상 롤 토토b, 경로 롤 토토path [, vars 롤 토토b [, 침묵 부울 ]] ) → 부울

롤 토토b_path_match_tz ( 대상 롤 토토b, 경로 롤 토토path [, vars 롤 토토b [, 침묵 부울 ]] ) → 부울

롤 토토b_path_query_tz ( 대상 롤 토토b, 경로 롤 토토path [, vars 롤 토토b [, 침묵 부울 ]] ) → 롤 토토b 집합

롤 토토b_path_query_array_tz ( 대상 롤 토토b, 경로 롤 토토path [, vars 롤 토토b [, 침묵 부울 ]] ) → 롤 토토b

롤 토토b_path_query_first_tz ( 대상 롤 토토b, 경로 롤 토토path [, vars 롤 토토b [, 침묵 부울 ]] ) → 롤 토토b

이러한 기능은 위에서 설명한 기능과 동일하게 작동합니다._tz접미사. 단, 이러한 함수는 시간대 인식 변환이 필요한 날짜/시간 값의 비교를 지원합니다. 아래 예에서는 날짜 전용 값을 해석해야 합니다.2015-08-02시간대가 포함된 타임스탬프이므로 결과는 현재에 따라 다릅니다.시간대설정. 이러한 종속성으로 인해 이러한 함수는 안정으로 표시됩니다. 이는 이러한 함수를 인덱스에서 사용할 수 없음을 의미합니다. 해당 항목은 변경할 수 없으므로 인덱스에서 사용할 수 있습니다. 하지만 그러한 비교를 요청하면 오류가 발생합니다.

롤 토토b_path_exists_tz('["2015-08-01 12:00:00-05"]', '$[*] ? (@.datetime() < "2015-08-02".datetime())')t

롤 토토b_pretty ( 롤 토토b ) → 텍스트

주어진 롤 토토 값을 보기 좋게 인쇄되고 들여쓰기된 텍스트로 변환합니다.

롤 토토b_pretty('["f1":1,"f2":null, 2]')

[

        "f1": 1,
        "f2": null
    ,
    2
]

롤 토토_typeof ( 롤 토토 ) → 텍스트

롤 토토b_typeof ( 롤 토토b ) → 텍스트

최상위 롤 토토 값의 유형을 텍스트 문자열로 반환합니다. 가능한 유형은 다음과 같습니다.객체, 배열, 문자열, 번호, 부울. (그결과는 SQL NULL과 혼동되어서는 안 됩니다. 예시를 참조하세요.)

롤 토토_typeof('-123.4')번호

롤 토토_typeof('null'::롤 토토)

롤 토토_typeof(NULL::롤 토토)은 NULL입니다.t


9.16.2. SQL/롤 토토 경로 언어#

SQL/롤 토토 경로 표현식은 XML에 대한 SQL 액세스에 사용되는 XPath 표현식과 유사하게 롤 토토 데이터에서 검색할 항목을 지정합니다. 에서포스트그레SQL, 경로 표현식은 다음과 같이 구현됩니다.롤 토토path데이터 유형이며 다음에 설명된 모든 요소를 사용할 수 있습니다.섹션 8.14.7.

롤 토토 쿼리 함수 및 연산자는 제공된 경로 표현식을 다음으로 전달합니다.경로 엔진평가용. 표현식이 쿼리된 롤 토토 데이터와 일치하는 경우 해당 롤 토토 항목 또는 항목 집합이 반환됩니다. 경로 표현식은 SQL/롤 토토 경로 언어로 작성되며 산술 표현식과 함수를 포함할 수 있습니다.

경로 표현식은 다음에서 허용하는 일련의 요소로 구성됩니다.롤 토토path데이터 유형. 경로 표현식은 일반적으로 왼쪽에서 오른쪽으로 평가되지만 괄호를 사용하여 작업 순서를 변경할 수 있습니다. 평가가 성공하면 일련의 롤 토토 항목이 생성되고 평가 결과는 지정된 계산을 완료하는 롤 토토 쿼리 함수로 반환됩니다.

쿼리 중인 롤 토토 값을 참조하려면(컨텍스트 항목), 다음을 사용하세요.$경로 표현식의 변수입니다. 다음에는 하나 이상이 올 수 있습니다.접속자 연산자은 롤 토토 구조를 수준별로 내려가 컨텍스트 항목의 하위 항목을 검색합니다. 뒤따르는 각 연산자는 이전 평가 단계의 결과를 처리합니다.

예를 들어, 분석하고 싶은 GPS 추적기의 롤 토토 데이터가 있다고 가정해 보겠습니다.

"추적": 
    "세그먼트": [

        "위치": [ 47.763, 13.4034 ],
        "시작 시간": "2018-10-14 10:05:14",
        "HR": 73
      ,

        "위치": [ 47.706, 13.2635 ],
        "시작 시간": "2018-10-14 10:39:21",
        "HR": 135

    ]

사용 가능한 트랙 세그먼트를 검색하려면 다음을 사용해야 합니다..주변 롤 토토 객체를 통해 내려오는 접근자 연산자:

$.track.segments

배열의 내용을 검색하려면 일반적으로 다음을 사용합니다.[*]연산자. 예를 들어 다음 경로는 사용 가능한 모든 트랙 세그먼트에 대한 위치 좌표를 반환합니다.

$.track.segments[*].location

첫 번째 세그먼트의 좌표만 반환하려면 다음에서 해당 첨자를 지정할 수 있습니다.[]접속자 연산자. 롤 토토 배열 인덱스는 0을 기준으로 한다는 점을 기억하세요.

$.track.segments[0].location

각 경로 평가 단계의 결과는 하나 이상에서 처리될 수 있습니다.롤 토토path다음에 나열된 연산자 및 메소드섹션 9.16.2.2. 각 메소드 이름 앞에는 점이 와야 합니다. 예를 들어 배열의 크기를 얻을 수 있습니다.

$.track.segments.size()

사용의 추가 예롤 토토path경로 표현식 내의 연산자와 메소드는 아래에 나타납니다.섹션 9.16.2.2.

경로를 정의할 때 하나 이상의 경로를 사용할 수도 있습니다.필터 표현식이것은 다음과 유사하게 작동합니다어디89389_89495

? (조건)

필터 표현식은 적용해야 하는 경로 평가 단계 직후에 작성되어야 합니다. 해당 단계의 결과는 제공된 조건을 충족하는 항목만 포함하도록 필터링됩니다. SQL/롤 토토은 3개의 값을 갖는 논리를 정의하므로 조건은 다음과 같습니다.사실, 거짓, 또는알 수 없음.알 수 없음값은 SQL과 동일한 역할을 합니다NULL그리고 다음을 사용하여 테스트할 수 있습니다.알 수 없음술어. 추가 경로 평가 단계에서는 필터 표현식이 반환된 항목만 사용합니다.사실.

필터 표현식에 사용할 수 있는 함수와 연산자는 다음에 나열되어 있습니다.표 9.51. 필터 표현식 내에서@변수는 필터링되는 값(즉, 이전 경로 단계의 결과 중 하나)을 나타냅니다. 다음에 접근자 연산자를 작성할 수 있습니다.@구성요소 항목을 검색합니다.

예를 들어, 130보다 높은 모든 심박수 값을 검색한다고 가정합니다. 다음 표현식을 사용하여 이를 달성할 수 있습니다:

$.track.segments[*].HR ? (@  130)

이러한 값을 가진 세그먼트의 시작 시간을 얻으려면 시작 시간을 반환하기 전에 관련 없는 세그먼트를 필터링해야 하므로 필터 표현식은 이전 단계에 적용되고 조건에 사용된 경로는 다릅니다.

$.track.segments[*] ? (@.HR  130)."시작 시간"

필요한 경우 여러 필터 표현식을 순서대로 사용할 수 있습니다. 예를 들어 다음 표현식은 관련 좌표와 높은 심박수 값이 있는 위치를 포함하는 모든 세그먼트의 시작 시간을 선택합니다.

$.track.segments[*] ? (@.location[1] < 13.4) ? (@.HR  130)."시작 시간"

다른 중첩 수준에서 필터 표현식을 사용하는 것도 허용됩니다. 다음 예에서는 먼저 모든 세그먼트를 위치별로 필터링한 다음 가능한 경우 이러한 세그먼트에 대한 높은 심박수 값을 반환합니다.

$.track.segments[*] ? (@.location[1] < 13.4).HR ? (@  130)

또한 필터 표현식을 서로 중첩할 수 있습니다.

$.track ? (존재(@.segments[*] ? (@.HR  130))).segments.size()

이 표현식은 심박수 값이 높은 세그먼트가 포함된 경우 트랙의 크기를 반환하고, 그렇지 않은 경우 빈 시퀀스를 반환합니다.

포스트그레SQL의 SQL/롤 토토 경로 언어 구현에는 SQL/롤 토토 표준과 다음과 같은 차이가 있습니다.

  • SQL/롤 토토 표준은 필터에서만 조건자를 허용하지만 경로 표현식은 부울 조건자가 될 수 있습니다. 이는 다음을 구현하는 데 필요합니다.@@연산자. 예를 들어 다음과 같습니다.롤 토토path표현식은 다음에서 유효합니다.PostgreSQL:

    $.track.segments[*].HR < 70
  • 다음에 사용된 정규식 패턴의 해석에는 약간의 차이가 있습니다.like_regex필터, 설명된 대로섹션 9.16.2.3.

9.16.2.1. 엄격하고 느슨한 모드#

롤 토토 데이터를 쿼리할 때 경로 표현식이 실제 롤 토토 데이터 구조와 일치하지 않을 수 있습니다. 존재하지 않는 개체 멤버나 배열 요소에 액세스하려고 하면 구조적 오류가 발생합니다. SQL/롤 토토 경로 표현식에는 구조적 오류를 처리하는 두 가지 모드가 있습니다.

  • lax(기본값) — 경로 엔진은 쿼리된 데이터를 지정된 경로에 암시적으로 적용합니다. 나머지 구조적 오류는 모두 억제되고 빈 SQL/롤 토토 시퀀스로 변환됩니다.

  • strict — 구조적 오류가 발생하면 오류가 발생합니다.

lax 모드는 롤 토토 데이터가 예상 스키마와 일치하지 않는 경우 롤 토토 문서 구조와 경로 표현의 일치를 용이하게 합니다. 피연산자가 특정 작업의 요구 사항과 일치하지 않는 경우 이 작업을 수행하기 전에 해당 요소를 SQL/롤 토토 시퀀스로 변환하여 자동으로 SQL/롤 토토 배열로 래핑되거나 래핑 해제될 수 있습니다. 게다가 비교 연산자는 lax 모드에서 피연산자를 자동으로 풀기 때문에 SQL/롤 토토 배열을 즉시 비교할 수 있습니다. 크기가 1인 배열은 해당 배열의 유일한 요소와 동일한 것으로 간주됩니다. 자동 언래핑은 다음과 같은 경우에만 수행되지 않습니다.

  • 경로 표현식에는 다음이 포함됩니다.유형()또는크기()각각 배열의 요소 유형과 수를 반환하는 메서드.

  • 조회된 롤 토토 데이터에 중첩 배열이 포함되어 있습니다. 이 경우 가장 바깥쪽 배열만 래핑 해제되고 모든 내부 배열은 변경되지 않습니다. 따라서 암시적 언래핑은 각 경로 평가 단계 내에서 한 수준 아래로만 내려갈 수 있습니다.

예를 들어 위에 나열된 GPS 데이터를 쿼리할 때 lax 모드를 사용할 때 세그먼트 배열을 저장한다는 사실을 추상화할 수 있습니다.

lax $.track.segments.location

엄격 모드에서 SQL/롤 토토 항목을 반환하려면 지정된 경로가 쿼리된 롤 토토 문서의 구조와 정확히 일치해야 하므로 이 경로 표현식을 사용하면 오류가 발생합니다. lax 모드에서와 동일한 결과를 얻으려면 명시적으로 포장을 풀어야 합니다.세그먼트배열:

엄격 $.track.segments[*].location

.**접속자는 lax 모드를 사용할 때 놀라운 결과를 초래할 수 있습니다. 예를 들어 다음 쿼리는 다음을 선택합니다.인사값을 두 번:

느슨한 $.**.HR

이것은 다음 때문에 발생합니다..**접속자는 두 가지를 모두 선택합니다세그먼트배열과 그 각 요소, 반면.HR접속자는 lax 모드를 사용할 때 자동으로 배열을 펼칩니다. 놀라운 결과를 피하려면 다음을 사용하는 것이 좋습니다..**엄격 모드에서만 접속자. 다음 쿼리는 각각을 선택합니다.인사값은 한 번만:

엄격 $.**.HR

9.16.2.2. SQL/롤 토토 경로 연산자 및 메소드#

표 9.50다음에서 사용할 수 있는 연산자 및 메소드를 표시합니다.롤 토토path. 단항 연산자와 메서드는 이전 경로 단계에서 발생한 여러 값에 적용될 수 있지만 이진 연산자(더하기 등)는 단일 값에만 적용될 수 있습니다.

표 9.50. 롤 토토path연산자 및 방법

연산자/메소드

설명

번호 + 번호번호

추가

롤 토토b_path_query('[2]', '$[0] + 3')5

+ 번호번호

단항 더하기(연산 없음); 추가와 달리 여러 값을 반복할 수 있습니다.

롤 토토b_path_query_array('"x": [2,3,4]', '+ $.x')[2, 3, 4]

번호 - 번호번호

뺄셈

롤 토토b_path_query('[2]', '7 - $[0]')5

- 번호번호

부정; 빼기와 달리 여러 값을 반복할 수 있습니다.

롤 토토b_path_query_array('"x": [2,3,4]', '- $.x')[-2, -3, -4]

번호 * 번호번호

곱셈

롤 토토b_path_query('[4]', '2 * $[0]')8

번호 / 번호번호

부서

롤 토토b_path_query('[8.5]', '$[0] / 2')4.2500000000000000

번호 % 번호번호

모듈로(나머지)

롤 토토b_path_query('[32]', '$[0] % 10')2

. 유형()문자열

롤 토토 항목 유형(참조롤 토토_typeof)

롤 토토b_path_query_array('[1, "2", ]', '$[*].type()')["숫자", "문자열", "개체"]

. 크기()번호

롤 토토 항목의 크기(배열 요소 수 또는 배열이 아닌 경우 1)

롤 토토b_path_query('"m": [11, 15]', '$.m.size()')2

. 더블()번호

롤 토토 숫자 또는 문자열에서 변환된 대략적인 부동 소수점 숫자

롤 토토b_path_query('"len": "1.9"', '$.len.double() * 2')3.8

번호 . 천장()번호

주어진 숫자보다 크거나 같은 가장 가까운 정수

롤 토토b_path_query('"h": 1.3', '$.h.ceiling()')2

번호 . 바닥()번호

주어진 숫자보다 작거나 같은 가장 가까운 정수

롤 토토b_path_query('"h": 1.7', '$.h.floor()')1

번호 . abs()번호

주어진 숫자의 절대값

롤 토토b_path_query('"z": -0.3', '$.z.abs()')0.3

문자열 . 날짜시간()datetime_type(참고 참조)

문자열에서 변환된 날짜/시간 값

롤 토토b_path_query('["2015-8-1", "2015-08-12"]', '$[*] ? (@.datetime() < "2015-08-2".datetime())')"2015-8-1"

문자열 . 날짜/시간(템플릿)datetime_type(참고 참조)

지정된 문자열을 사용하여 문자열에서 변환된 날짜/시간 값to_timestamp템플릿

롤 토토b_path_query_array('["12:30", "18:40"]', '$[*].datetime("HH24:MI")')["12:30:00", "18:40:00"]

객체 . 키값()배열

세 개의 필드를 포함하는 객체 배열로 표현되는 객체의 키-값 쌍:"열쇠", "값"그리고"ID"; "ID"은 키-값 쌍이 속한 개체의 고유 식별자입니다.

롤 토토b_path_query_array('"x": "20", "y": 32', '$.keyvalue()')["id": 0, "key": "x", "value": "20", "id": 0, "key": "y", "value": 32]


참고

다음의 결과 유형날짜시간()그리고날짜/시간(템플릿)방법은 다음과 같습니다날짜, timetz, 시간, timestamptz, 또는타임스탬프. 두 메서드 모두 결과 유형을 동적으로 결정합니다.

날짜시간()메소드는 입력 문자열을 다음에 대한 ISO 형식과 일치시키려고 순차적으로 시도합니다.날짜, timetz, 시간, timestamptz타임스탬프. 첫 번째로 일치하는 형식에서 중지하고 해당 데이터 유형을 내보냅니다.

날짜/시간(템플릿)메소드는 제공된 템플릿 문자열에 사용된 필드에 따라 결과 유형을 결정합니다.

날짜시간()그리고날짜/시간(템플릿)메소드는 동일한 구문 분석 규칙을 사용합니다.to_timestampSQL 함수는 다음을 수행합니다(참조PostgreSQL : 문서 : 16 : 9.8. 데이터 유형 스포츠 토토 결과 스포츠 토토 결과 기능), 세 가지 예외가 있습니다. 첫째, 이러한 방법은 일치하지 않는 템플릿 패턴을 허용하지 않습니다. 둘째, 템플릿 문자열에는 빼기 기호, 마침표, 사선(슬래시), 쉼표, 아포스트로피, 세미콜론, 콜론 및 공백과 같은 구분 기호만 허용됩니다. 셋째, 템플릿 문자열의 구분 기호는 입력 문자열과 정확히 일치해야 합니다.

다른 날짜/시간 유형을 비교해야 하는 경우 암시적 형변환이 적용됩니다. 갑날짜값은 다음으로 변환될 수 있습니다.타임스탬프또는timestamptz, 타임스탬프다음으로 전송 가능timestamptz시간timetz. 그러나 첫 번째 변환을 제외한 모든 변환은 현재에 따라 달라집니다.시간대설정이므로 시간대 인식 내에서만 수행될 수 있습니다.롤 토토path함수.

표 9.51사용 가능한 필터 표현식 요소를 표시합니다.

표 9.51. 롤 토토path필터 표현식 요소

술어/값

설명

== 부울

동일성 비교(이 비교 연산자와 다른 비교 연산자는 모든 롤 토토 스칼라 값에 대해 작동함)

롤 토토b_path_query_array('[1, "a", 1, 3]', '$[*] ? (@ == 1)')[1, 1]

롤 토토b_path_query_array('[1, "a", 1, 3]', '$[*] ? (@ == "a")')["a"]

!= 부울

< 부울

비동등 비교

롤 토토b_path_query_array('[1, 2, 1, 3]', '$[*] ? (@ != 1)')[2, 3]

롤 토토b_path_query_array('["a", "b", "c"]', '$[*] ? (@ < "b")')["a", "c"]

< 부울

미만 비교

롤 토토b_path_query_array('[1, 2, 3]', '$[*] ? (@ < 2)')[1]

<= 부울

작거나 같음 비교

롤 토토b_path_query_array('["a", "b", "c"]', '$[*] ? (@ <= "b")')["a", "b"]

부울

보다 큼 비교

롤 토토b_path_query_array('[1, 2, 3]', '$[*] ? (@ 2)')[3]

= 부울

크거나 같음 비교

롤 토토b_path_query_array('[1, 2, 3]', '$[*] ? (@ = 2)')[2, 3]

부울

롤 토토 상수

롤 토토b_path_query('["name": "John", "parent": false, "name": "Chris", "parent": true]', '$[*] ? (@.parent == true)')"이름": "크리스", "부모": 참

거짓부울

롤 토토 상수거짓

롤 토토b_path_query('["name": "John", "parent": false, "name": "Chris", "parent": true]', '$[*] ? (@.parent == false)')"이름": "존", "부모": 거짓

롤 토토 상수(SQL과 달리 다음과 비교한다는 점에 유의하세요.정상적으로 작동합니다)

롤 토토b_path_query('["name": "Mary", "job": null, "name": "Michael", "job": "driver"]', '$[*] ? (@.job == null) .name')"메리"

부울 && 부울부울

부울 AND

롤 토토b_path_query('[1, 3, 7]', '$[*] ? (@ 1 && @ < 5)')3

부울 || 부울부울

부울 OR

롤 토토b_path_query('[1, 3, 7]', '$[*] ? (@ < 1 || @ 5)')7

! 부울부울

부울 NOT

롤 토토b_path_query('[1, 3, 7]', '$[*] ? (!(@ < 5))')7

부울 알 수 없음부울

부울 조건이 다음과 같은지 테스트합니다.알 수 없음.

롤 토토b_path_query('[-1, 2, 7, "foo"]', '$[*] ? ((@ 0)은 알 수 없음)')"foo"

문자열 like_regex 문자열 [ 플래그 문자열 ] → 부울

첫 번째 피연산자가 두 번째 피연산자가 제공한 정규식과 일치하는지 여부를 테스트합니다. 선택적으로 다음 문자열로 설명된 수정 사항을 적용합니다.플래그문자(참조섹션 9.16.2.3).

롤 토토b_path_query_array('["abc", "abd", "aBdC", "abdacb", "babc"]', '$[*] ? (@ like_regex "^ab.*c")')["abc", "abdacb"]

롤 토토b_path_query_array('["abc", "abd", "aBdC", "abdacb", "babc"]', '$[*] ? (@ like_regex "^ab.*c" flag "i")')["abc", "aBdC", "abdacb"]

문자열 다음으로 시작 문자열부울

두 번째 피연산자가 첫 번째 피연산자의 초기 부분 문자열인지 테스트합니다.

롤 토토b_path_query('["John Smith", "Mary Stone", "Bob Johnson"]', '$[*] ? (@는 "John"으로 시작)')"존 스미스"

존재합니다 ( 경로_표현 )부울

경로 표현식이 하나 이상의 SQL/롤 토토 항목과 일치하는지 테스트합니다. 반품알 수 없음경로 표현식으로 인해 오류가 발생하는 경우; 두 번째 예에서는 이를 사용하여 엄격 모드에서 키가 없는 오류를 방지합니다.

롤 토토b_path_query('"x": [1, 2], "y": [2, 4]', '엄격한 $.* ? (존재 (@ ? (@[*] 2)))')[2, 4]

롤 토토b_path_query_array('"value": 41', 'strict $ ? (exists (@.name)) .name')[]


9.16.2.3. SQL/롤 토토 정규 표현식#

SQL/롤 토토 경로 표현식을 사용하면 텍스트를 다음과 같은 정규 표현식과 일치시킬 수 있습니다.like_regex필터. 예를 들어 다음 SQL/롤 토토 경로 쿼리는 영어 모음으로 시작하는 배열의 모든 문자열과 대소문자를 구분하지 않고 일치합니다.

$[*] ? (@ like_regex "^[aeiou]" 플래그 "i")

선택사항플래그문자열에는 하나 이상의 문자가 포함될 수 있습니다.i대소문자를 구분하지 않는 일치의 경우,m허용하다^그리고$개행 문자와 일치하도록,s허용하다.개행 문자와 일치하고q전체 패턴을 인용합니다(동작을 간단한 하위 문자열 일치로 축소).

SQL/롤 토토 표준은 다음에서 정규 표현식에 대한 정의를 차용합니다.LIKE_REGEX연산자이며 이는 XQuery 표준을 사용합니다. PostgreSQL은 현재 다음을 지원하지 않습니다.LIKE_REGEX연산자. 그러므로,like_regex필터는 다음에 설명된 POSIX 정규식 엔진을 사용하여 구현됩니다.섹션 9.7.3. 이로 인해 표준 SQL/롤 토토 동작과 여러 가지 사소한 불일치가 발생합니다. 이에 대한 목록은 다음과 같습니다.섹션 9.7.3.8. 그러나 여기에 설명된 플래그 문자 비호환성은 SQL/롤 토토에 적용되지 않습니다. SQL/롤 토토은 POSIX 엔진이 예상하는 것과 일치하도록 XQuery 플래그 문자를 변환하기 때문입니다.

다음의 패턴 인수를 명심하십시오.like_regex은(는) 다음에 제공된 규칙에 따라 작성된 롤 토토 경로 문자열 리터럴입니다.섹션 8.14.7. 이는 특히 정규 표현식에 사용하려는 백슬래시를 두 배로 늘려야 함을 의미합니다. 예를 들어, 숫자만 포함하는 루트 문서의 문자열 값을 일치시키려면 다음을 수행하십시오.

$.* ? (@ like_regex "^\\d+$")

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.