9.16. 롤 토토 기능 및 운영자#

이 섹션은 다음을 설명합니다.

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

  • SQL/롤 토토 PATH LANGUAGE

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

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

  • 롤 토토 데이터를 데이터베이스에 업로드하고 일반 SQL 열에 문자 또는 이진 문자열로 저장하십시오.

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

  • SQL/롤 토토 쿼리 함수 및 SQL/롤 토토 PATH Language Expressions를 사용하여 롤 토토 데이터 쿼리.

SQL/롤 토토 표준에 대해 자세히 알아 보려면 참조[SQLTR-19075-6]. 지원되는 롤 토토 유형에 대한 자세한 내용은postgresql, 참조PostgreSQL : 문서 : 16 : 8.14. 토토 캔 유형.

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

표 9.45롤 토토 데이터 유형과 함께 사용할 수있는 연산자를 보여줍니다 (참조PostgreSQL : 문서 : 16 : 8.14. 토토 캔 유형). 또한에 표시된 일반적인 비교 연산자표 9.1롤 토토B롤 토토. 비교 연산자는에 요약 된 B- 트리 작업에 대한 주문 규칙을 따릅니다.섹션 8.14.4. 참조 참조PostgreSQL : 문서 : 16 : 9.21. 스포츠 토토 베트맨 기능집계 함수의 경우롤 토토_AGG값을 롤 토토, 집계 함수로 기록하는 집계롤 토토_object_agg어떤 값을 롤 토토 객체에 집계하고롤 토토B등가,롤 토토B_AGGand롤 토토B_OBJECT_AGG.

표 9.45. 롤 토토and롤 토토B운영자

운영자

설명

example (s)

롤 토토 - 정수롤 토토

롤 토토B - Integer롤 토토B

추출물n'롤 토토 배열의 요소 (배열 요소는 0에서 인덱싱되지만 음의 정수는 끝까지 횟수)..

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

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

롤 토토 - 텍스트롤 토토

롤 토토B - 텍스트롤 토토B

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

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

롤 토토 - 정수텍스트

롤 토토B - 정수텍스트

추출물n'롤 토토 배열의 요소 as텍스트.

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

롤 토토 - 텍스트텍스트

롤 토토B - 텍스트텍스트

주어진 키로 롤 토토 객체 필드를 추출합니다.텍스트.

' "A": 1, "B": 2':: 롤 토토- 'B'2

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

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

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

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

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

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

지정된 경로에서 롤 토토 하위 객체를 추출하여텍스트.

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


Note

롤 토토 입력에 요청과 일치 할 올바른 구조가 없으면 필드/요소/경로 추출 연산자가 실패하지 않고 널 리턴합니다. 예를 들어 그러한 키 또는 배열 요소가 존재하지 않는 경우

일부 추가 연산자는에만 존재합니다롤 토토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':: jsonb <@ ' "a": 1, "b": 2':: jsonbt

롤 토토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? & ARRAY ['A ','B ']t

롤 토토B || 롤 토토B롤 토토B

두 가지롤 토토B값. 두 배열을 연결하면 각 입력의 모든 요소가 포함 된 배열이 생성됩니다. 두 객체를 연결하면 키의 결합을 포함하는 객체가 생성되어 중복 키가있을 때 두 번째 객체의 값을 취합니다. 다른 모든 사례는 비 배열 입력을 단일 요소 어레이로 변환 한 다음 두 배열과 같이 진행하여 처리됩니다. 재귀 적으로 작동하지 않습니다 : 최상위 배열 또는 객체 구조 만 병합됩니다.

'[ "A", "B"]':: 롤 토토B || '[ "a", "d"]':: 롤 토토B[ "A", "B", "A", "D"]

' "a": "b"':: 롤 토토B || ' "c": "d"':: jsonb"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 - Integer롤 토토B

​​지정된 인덱스로 배열 요소를 삭제합니다 (끝에서 음의 정수 수). 롤 토토 값이 배열이 아닌 경우 오류를 던집니다.

'[ "A", "B"]':: 롤 토토B -1[ "A"]

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

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

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

롤 토토B @? 롤 토토PATH부울

롤 토토 PATH가 지정된 롤 토토 값에 대한 항목을 반환합니까?

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

롤 토토B @@ 롤 토토PATH부울

지정된 롤 토토 값에 대한 롤 토토 PATH PRECTICE의 결과를 반환합니다. 결과의 첫 번째 항목 만 고려됩니다. 결과가 부울하지 않으면NULL반환되었습니다.

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


note

the롤 토토PATH운영자@?and@@다음 오류를 억제하십시오 : 객체 필드 또는 배열 요소, 예기치 않은 롤 토토 항목 유형, DateTime 및 숫자 오류. 그만큼롤 토토PATH-관련 함수 아래 설명 된 기능은 이러한 유형의 오류를 억제하도록 지시받을 수 있습니다. 이 동작은 다양한 구조의 롤 토토 문서 모음을 검색 할 때 도움이 될 수 있습니다.

표 9.47구성 할 수있는 기능을 보여줍니다롤 토토롤 토토B값. 이 테이블의 일부 기능에는가 있습니다.반환절에서 반환 된 데이터 유형을 지정합니다. 중 하나 여야합니다.롤 토토, 롤 토토B, BYTEA, 캐릭터 문자열 유형 (텍스트, char또는Varchar) 또는 캐스트 할 수있는 유형롤 토토. 기본적으로롤 토토유형이 반환됩니다.

표 9.47. 롤 토토 제작 기능

기능

설명

예제

to_롤 토토 ( Anylement ) → 롤 토토

TO_롤 토토B ( Anylement ) → 롤 토토B

모든 SQL 값을로 변환합니다.롤 토토또는롤 토토B. 배열 및 복합재는 배열 및 물체로 재귀 적으로 변환됩니다 (다차원 배열은 롤 토토의 배열 배열이됩니다). 그렇지 않으면 SQL 데이터 유형에서로 캐스트가있는 경우롤 토토, 캐스트 함수는 변환을 수행하는 데 사용됩니다.[a]그렇지 않으면 스칼라 롤 토토 값이 생성됩니다. 숫자, 부울 또는 널 값 이외의 스칼라의 경우 텍스트 표현이 사용됩니다.

TO_롤 토토 ( '프레드는 "안녕."':: text)"Fred Said \"Hi. \ ""

TO_롤 토토B (Row (42, '프레드가 말했다."F1": 42, "F2": "Fred는 \"Hi. \ "" 말했다.

array_to_롤 토토 ( AnyArray [, 부울 ] ) → 롤 토토

SQL 어레이를 롤 토토 어레이로 변환합니다. 행동은와 동일합니다.to_롤 토토옵션 부울 매개 변수가 참이면 최상위 배열 요소 사이에 라인 피드가 추가됩니다.

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

롤 토토_array ( [ { value_expression [ 형식 롤 토토 ] } [, ...] ] [ { NULL | 결석 } on null ] [ 반환 data_type [ 형식 롤 토토 [ UTF8 인코딩 ] ] ])

롤 토토_ARRAY ( [ query_expression ] [ 반환 data_type [ 형식 롤 토토 [ UTF8 인코딩 ] ] ])

일련의 일련에서 롤 토토 배열을 구성value_expression매개 변수 또는 결과에서query_expression, 단일 열을 반환하는 선택 쿼리 여야합니다. 만약에null에 결석지정되어 있고 널 값은 무시됩니다. A이라면 항상 그렇습니다.query_expression사용됩니다.

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

롤 토토_ARRAY (select * from (values ​​(1), (2))[1, 2]

row_to_롤 토토 ( 레코드 [, 부울 ] ) → 롤 토토

SQL 복합 값을 롤 토토 객체로 변환합니다. 행동은와 동일합니다.to_롤 토토옵션 부울 매개 변수가 참이면 선 피드가 최상위 요소간에 추가됩니다.

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

롤 토토_BUILD_ARRAY ( variadic "Any" ) → 롤 토토

롤 토토B_BUILD_ARRAY ( variadic "Any" ) → 롤 토토B

다양한 인수 목록에서 아마도 이질적인 롤 토토 배열을 구축합니다. 각 인수는에 따라 변환됩니다.to_롤 토토또는TO_롤 토토B.

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

롤 토토_build_object ( variadic "Any" ) → 롤 토토

롤 토토B_BUILD_OBJECT ( variadic "Any" ) → 롤 토토B

Variadic 인수 목록에서 롤 토토 객체를 빌드합니다. 컨벤션별로, 인수 목록은 교대 키와 값으로 구성됩니다. 주요 인수는 텍스트로 강요됩니다. 값 인수는에 따라 변환됩니다.to_롤 토토또는TO_롤 토토B.

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

롤 토토_object ( [ { key_expression { value | ':' } value_expression [ 형식 롤 토토 [ UTF8 인코딩 ] ] }[, ...] ] [ { NULL | 결석 } ON NULL ] [ { with | 없음 } 고유 한 [ ] ] [ 반환 data_type [ 형식 롤 토토 [ UTF8 인코딩 ] ] ])

주어진 모든 키/값 쌍의 롤 토토 객체를 구성합니다.key_expression|롤 토토키,텍스트타입. 될 수 없습니다NULL|롤 토토타입. 만약에고유 키지정되어 있습니다. 중복이 없어야합니다key_expression. 모든 쌍value_expression평가NULL출력에서 ​​생략됩니다null에 결석지정되어 있습니다. 만약에NULL on NULL지정되거나 조항이 생략되면 키는 값에 포함되어 있습니다NULL.

롤 토토_object ( 'code'value 'p123', 'title': 'jaws')"코드": "p123", "title": "jaws"

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

롤 토토B_OBJECT ( 텍스트 [] ) → 롤 토토B

텍스트 배열에서 롤 토토 객체를 빌드합니다. 배열에는 짝수의 멤버가있는 정확한 1 차원이 있어야하며,이 경우 각 내부 배열에 정확히 두 개의 요소가 있도록 키/값 쌍으로 취해 지도록 두 개의 차원으로 간주됩니다. 모든 값은 롤 토토 문자열로 변환됩니다.

롤 토토_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. 토토 커뮤니티 - 토토 커뮤니티 키/값 데이터 유형Extension은에서 캐스트되었습니다.hstoreto롤 토토hstore롤 토토 생성 함수를 통해 변환 된 값은 원시 문자열 값이 아닌 롤 토토 객체로 표시됩니다..


표 9.48세부 사항 롤 토토 테스트를위한 SQL/롤 토토 시설.

표 9.48. SQL/롤 토토 테스트 기능

함수 서명

설명

예제

표현 is [ 아님 ] 롤 토토 [ { value | 스칼라 | 배열 | 개체 } ] [ { with | 없음 } 고유 한 [ ] ]

이 술어 테스트 여부표현지정된 유형의 롤 토토으로 구문 분석 할 수 있습니다. 만약에스칼라또는배열또는개체지정되어 있습니다. 테스트는 롤 토토이 특정 유형인지 여부입니다. 만약에고유 키지정된 다음의 모든 객체가 지정되어 있습니다.표현중복 키가 있는지 확인하기 위해 테스트되었습니다.

JS 선택,
  JS는 롤 토토 "롤 토토?"입니다.
  JS는 롤 토토 Scalar "Scalar?"입니다.
  JS는 롤 토토 Object "Object?"입니다.
  JS는 롤 토토 어레이 "어레이?"입니다.
에서 (값
      ( '123'), ( ' "abc"'), ( ' "a": "b"'), ( '[1,2]'), ( 'abc')) foo (js);
     JS | 롤 토토? | 스칼라? | 물체? | 정렬?
------------+-------+---------+--------+--------
 123 | t | t | f | 에프
 "ABC"| t | t | f | 에프
  "a": "b" | t | f | t | 에프
 [1,2] | t | f | f | 티
 ABC | f | f | f | 에프
JS 선택,
  JS는 롤 토토 Object "Object?"입니다.
  JS는 롤 토토 배열 "어레이?"입니다.
  JS는 고유 키 "Array W. UK?"가있는 롤 토토 어레이입니다.
  JS는 고유 키가없는 롤 토토 어레이입니다.
from ( '['[ "a": "1",
  "b": "2", "b": "3"])) foo (js);
-[레코드 1]-+-------------------
JS | [ "a": "1", +
              |   "B": "2", "B": "3"]
물체?       | 에프
정렬?        | 티
배열 w. 영국?  | 에프
영국과의 배열? | 티

표 9.49처리 할 수있는 기능을 보여줍니다롤 토토and롤 토토B값.

표 9.49. 롤 토토 처리 기능

기능

설명

예제

롤 토토_array_elements ( 롤 토토 ) → 롤 토토 SETOF 롤 토토

롤 토토b_array_elements ( 롤 토토B ) → setof jsonb

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

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

값
----------
 1
 진실
 [2, false]

롤 토토_array_elements_text ( 롤 토토 ) → 텍스트 설정

롤 토토B_ARRAY_ELEMENTS_TEXT ( 롤 토토B ) → 텍스트 설정

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

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

값
----------
 foo
 술집

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

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

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

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

롤 토토b_array_length ( '[]')0

롤 토토_each ( 롤 토토 ) → 기록 설정 ( 텍스트, value 롤 토토 )

롤 토토B_EACH ( 롤 토토B ) → Setof Record ( 텍스트, value 롤 토토B )

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

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

키 | 값
-----+-------
 A | "foo"
 B | "술집"

롤 토토_each_text ( 롤 토토 ) → 기록 ( 텍스트, value 텍스트 )

롤 토토B_ECH_TEXT ( 롤 토토B ) → Setof Record ( 텍스트, value 텍스트 )

최상위 롤 토토 객체를 키/값 쌍 세트로 확장합니다. 반환values는 유형이 될 것입니다텍스트.

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

키 | 값
-----+-------
 A | foo
 B | 술집

롤 토토_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

롤 토토_POPULE_RECORD ( 베이스 Anylement, From_롤 토토 롤 토토 ) → Anylement

롤 토토B_POPULE_RECORD ( Base Anylement, From_롤 토토 롤 토토B ) → Anylement

최상위 롤 토토 객체를 복합 유형의 |Base인수. 롤 토토 객체는 출력 행 유형의 열 이름과 일치하는 필드에 대해 스캔되고 해당 값이 출력 열에 삽입됩니다. (출력 열 이름에 해당하지 않는 필드는 무시됩니다.) 일반적으로 사용하면베이스is is justNULL, 즉 객체 필드와 일치하지 않는 모든 출력 열에는 널로 채워집니다. 그러나 ifbase그렇지 않음NULL그러면 포함 된 값은 비교할 수없는 열에 사용됩니다.

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

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

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

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

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

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

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

아래 예제는 상수 롤 토토 값을 사용하지만 일반적인 사용은 a를 참조하는 것입니다.롤 토토또는롤 토토B쿼리의 다른 테이블에서 측면으로 열From절. 글쓰기롤 토토_POPULE_RECORDinFrom절차는 추출 된 모든 열을 중복 함수 호출없이 사용할 수 있기 때문에 좋은 관행입니다.

유형 SUBROWTYPE 생성 (d int, e text); 유형 MyRowType 생성 MyRowType (in int, b text [], c subrowtype);

선택 *에서 * json_populate_record에서 * select *에서 선택 * null :: myrowtype, ' "a": 1, "b": [ "2", "a b"], "c": "d": 4, "e": "a b c", "x": "foo"')

a |   B |      기음
---+-----------+------------
 1 | 2, "a b" | (4, "A B C")

롤 토토_POPULE_RECORDSET ( 베이스 Anylement, from_롤 토토 롤 토토 ) → 모든 요소 설정

롤 토토B_POPULE_RECORDSET ( base Anylement, from_롤 토토 롤 토토B ) → anylement의 설정

객체의 최상위 json 배열을 복합 유형의를 갖는 행 세트로 확장합니다.Base인수. 롤 토토 어레이의 각 요소는 위에서 설명한대로 처리됩니다.롤 토토 [B] _Populate_Record.

타입 2 인트 생성 (int, b int);

선택 *에서 * json_popule_recordset에서 * select *에서 선택 * null :: twoints, '[ "a": 1, "b": 2, "a": 3, "b": 4]')

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

롤 토토_TO_RECORD ( 롤 토토 ) → 레코드

롤 토토B_TO_RECORD ( 롤 토토B ) → 레코드

최상위 롤 토토 객체를 복합 유형에 의해 정의 된 행으로 확장as절. (모든 기능이 반환되는 것과 마찬가지로레코드, 호출 쿼리는 레코드의 구조를 AN으로 명시 적으로 정의해야합니다as절.) 출력 레코드는 위에서 설명한 것과 같은 방식으로 롤 토토 객체의 필드에서 채워집니다.롤 토토 [B] _populate_record. 입력 레코드 값이 없기 때문에 타의 추종을 불허하는 열에는 항상 널로 채워집니다.

유형 MyRowType 생성 MyRowType (in int, b text);

json_to_record ( ' "a": 1, "b": [1,2,3], "c": [1,2,3], "e": "r": "a": 123, "b": "a b c"') x (a int, b int, c int, c int, c int, c int, c int, b in) myrowtype)

a |    B |    C | d |       아르 자형
---+--------+--------+---+-------------
 1 | [1,2,3] | 1,2,3 |   | (123, "A B C")

롤 토토_TO_RECORDSET ( 롤 토토 ) → Setof Record

롤 토토B_TO_RECORDSET ( 롤 토토B ) → 기록 설정

최상위 레벨 롤 토토 객체 배열을 AN에 의해 ​​정의 된 복합 유형을 갖는 일련의 행으로 확장합니다as절. (모든 기능이 반환되는 것과 마찬가지로레코드, 호출 쿼리는 레코드의 구조를 AN으로 명시 적으로 정의해야합니다as절.) 롤 토토 어레이의 각 요소는 위에서 설명한대로 처리됩니다.롤 토토 [B] _POPULE_RECORD.

json_to_recordset에서 * 선택 * 선택 * ( '[ "a": 1, "b": "foo", "a": "2", "c": "bar"]') as x (a int, b text)

a |  비
---+-----
 1 | foo
 2 |

롤 토토B_SET ( 대상 롤 토토B, PATH 텍스트 [], new_value 롤 토토B [, create_if_missing 부울 ] ) → 롤 토토B

반환대상PATH대체new_value또는 withNew_Valueif 추가create_if_missingtrue (기본값) 및이 지정된 항목PATH존재하지 않습니다. 경로의 모든 초기 단계가 존재해야합니다.대상변경되지 않은 것으로 반환됩니다. 경로 지향 연산자와 마찬가지로에 나타나는 부정적인 정수PATH롤 토토 어레이의 끝에서 카운트. 마지막 경로 단계가 범위를 벗어난 배열 인덱스 인 경우create_if_missing사실, 인덱스가 음수 인 경우 배열의 시작 부분에 새 값이 추가되거나 배열이 양수 인 경우 배열 끝에 추가됩니다..

롤 토토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, PATH 텍스트 [], new_value 롤 토토B [, create_if_missing 부울 [, null_value_treatment 텍스트 ]] ) → 롤 토토B

ifnew_valueNULL, 동일하게 동작롤 토토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]

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

롤 토토B_INSERT ( 대상 롤 토토B, PATH 텍스트 [], new_value 롤 토토B [, insert_after 부울 ] ) → 롤 토토B

반환대상withnew_value삽입. 에 의해 지정된 항목이있는 경우PATH배열 요소입니다.new_value해당 항목 앞에 삽입됩니다.insert_after거짓 (기본값)이거나 이후에insert_after사실입니다. 에 의해 지정된 항목이있는 경우PATH객체 필드입니다.new_value객체에 해당 키가 포함되지 않은 경우에만 삽입됩니다. 경로의 모든 초기 단계가 존재해야합니다.대상변경되지 않은 반환됩니다. 경로 지향 연산자와 마찬가지로에 나타나는 부정적인 정수Path롤 토토 어레이의 끝에서 카운트. 마지막 경로 단계가 범위를 벗어난 배열 인덱스 인 경우 인덱스가 음수 인 경우 배열 시작시 또는 배열 끝에 양수 인 경우 새 값이 추가됩니다..

롤 토토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

주어진 롤 토토 값에서 널 값을 갖는 모든 객체 필드를 재귀 적으로 삭제합니다. 객체 필드가 ​​아닌 널 값은 손대지 않았습니다.

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

jsonb_path_exists ( 대상 롤 토토B, PATH 롤 토토PATH [, vars 롤 토토B [, Silent 부울 ]] ) → 부울

롤 토토 경로가 지정된 롤 토토 값에 대해 항목을 반환하는지 확인합니다. 인 경우vars인수가 지정되어 있고, 롤 토토 객체 여야하며, 그 필드는 이름 지정된 값을 제공해야합니다.롤 토토PATH표현. 인 경우Silent인수가 지정되었으며true, 함수는와 동일한 오류를 억제합니다.@?and@@운영자가.

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

롤 토토B_PATH_MATCH ( 대상 롤 토토B, PATH 롤 토토PATH [, vars 롤 토토B [, Silent 부울 ]] ) → 부울

지정된 롤 토토 값에 대한 롤 토토 경로 술어 검사 결과를 반환합니다. 결과의 첫 번째 항목 만 고려됩니다. 결과가 부울하지 않으면NULL반환됩니다. 선택 사항varsandSilent인수와 동일하게jsonb_path_exists.

롤 토토b_path_match ( ' "a": [1,2,3,4,5]', '존재 ($. A [*]?t

롤 토토B_PATH_QUERY ( 대상 롤 토토B, Path 롤 토토PATH [, vars 롤 토토B [, Silent 부울 ]] ) → setof jsonb

지정된 롤 토토 값에 대해 롤 토토 경로에 의해 반환 된 모든 롤 토토 항목을 반환합니다. 선택 사항varsSilent인수와 동일하게jsonb_path_exists.

롤 토토b_path_query ( ' "a": [1,2,3,4,5]', '$ .a [ *]?

롤 토토B_PATH_QUERY
-----------------
 2
 3
 4

롤 토토B_PATH_QUERY_ARRAY ( 대상 롤 토토B, PATH 롤 토토PATH [, vars 롤 토토B [, Silent 부울 ]] ) → 롤 토토B

지정된 롤 토토 값에 대해 롤 토토 경로에 의해 RETURNE RETURNE 롤 토토 값을 롤 토토 어레이로 반환합니다. 선택 사항varsandSilent인수와 동일하게jsonb_path_exists.

롤 토토B_PATH_QUERY_ARRAY ( ' "a": [1,2,3,4,5]', '$ .a [*]?[2, 3, 4]

롤 토토B_PATH_QUERY_FIRST ( 대상 롤 토토B, PATH 롤 토토PATH [, vars 롤 토토B [, Silent 부울 ]] ) → 롤 토토B

지정된 롤 토토 값에 대해 롤 토토 경로에서 반환 한 첫 번째 롤 토토 항목을 반환합니다. 보고null결과가없는 경우. 선택 사항varsandSilent인수와 동일하게jsonb_path_exists.

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

jsonb_path_exists_tz ( 대상 롤 토토B, PATH 롤 토토PATH [, vars 롤 토토B [, Silent 부울 ]] ) → 부울

롤 토토B_PATH_MATCH_TZ ( 대상 롤 토토B, PATH 롤 토토PATH [, vars 롤 토토B [, Silent 부울 ]] ) → 부울

롤 토토B_PATH_QUERY_TZ ( 대상 롤 토토B, PATH 롤 토토PATH [, vars 롤 토토B [, Silent 부울 ]] ) → setof jsonb

롤 토토B_PATH_QUERY_ARRAY_TZ ( 대상 롤 토토B, PATH 롤 토토PATH [, vars 롤 토토B [, Silent 부울 ]] ) → 롤 토토B

롤 토토B_PATH_QUERY_FIRST_TZ ( 대상 롤 토토B, PATH 롤 토토PATH [, vars 롤 토토B [, Silent 부울 ]] ) → 롤 토토B

이 기능은 위에서 설명한 상대방처럼 작용합니다._TZ접미사. 아래의 예는 날짜 전용 값의 해석이 필요합니다2015-08-02시간대가있는 타임 스탬프로서 결과는 현재에 따라 다릅니다TimeZone설정. 이러한 종속성으로 인해 이러한 기능은 안정적으로 표시되므로 이러한 기능은 인덱스에 사용할 수 없습니다. 그들의 상대방은 불변이기 때문에 인덱스에 사용될 수 있습니다. 그러나 그러한 비교를 요청하면 오류가 발생합니다.

jsonb_path_exists_tz ( '[ "2015-08-01 12 : 00 : 00-05"]', '$ [*]?t

롤 토토B_PRETTY ( 롤 토토B ) → 텍스트

주어진 롤 토토 값을 인쇄 된 인쇄 된 텍스트로 변환합니다.

jsonb_pretty ( '[ "f1": 1, "f2": null, 2]

[

        "F1": 1,
        "F2": NULL
    ,
    2
]

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

롤 토토B_TYPEOF ( 롤 토토B ) → 텍스트

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

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

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

롤 토토_typeof (null :: json)는 nullt


9.16.2. SQL/롤 토토 Path Language#

SQL/롤 토토 경로 표현식 XML에 대한 SQL 액세스에 사용되는 XPath 표현식과 유사한 롤 토토 데이터에서 검색 할 항목을 지정합니다. 안에PostgreSQL, 경로 표현식은로 구현됩니다.롤 토토PATH데이터 유형 및에 설명 된 요소를 사용할 수 있습니다섹션 8.14.7.

롤 토토 쿼리 함수 및 연산자가 제공된 경로 표현식을 전달합니다Path Engine평가 용. 표현식이 쿼리 된 롤 토토 데이터와 일치하면 해당 롤 토토 항목 또는 항목 세트가 반환됩니다. 경로 표현식은 SQL/롤 토토 Path Language로 작성되며 산술 표현 및 기능을 포함 할 수 있습니다.

경로 표현식은에 의해 허용되는 일련의 요소로 구성됩니다.롤 토토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 [*]. 위치

첫 번째 세그먼트의 좌표 만 반환하려면 해당 첨자를 지정할 수 있습니다.[]액세서 연산자. 롤 토토 배열 인덱스는 0과 관련이 있음을 상기하십시오.

$ .track.segments [0] .location

각 경로 평가 단계의 결과는 하나 이상으로 처리 할 수 ​​있습니다롤 토토PATH운영자 및 메소드에 나열된섹션 9.16.2.2. 각 메소드 이름에는 점이 뒤 바져 있어야합니다. 예를 들어 배열의 크기를 얻을 수 있습니다.

$ .track.segments.size ()

사용의 더 많은 예롤 토토PATH경로 표현식 내의 연산자 및 메소드 아래에 표시섹션 9.16.2.2.

경로를 정의 할 때 하나 이상을 사용할 수도 있습니다필터 표현식그와 유사하게 작동하는여기서SQL의 조항. 필터 표현식은 물음표로 시작하여 괄호로 조건을 제공합니다.

? (조건)

필터 표현식은 적용 해야하는 경로 평가 단계 직후에 작성해야합니다. 해당 단계의 결과는 제공된 조건을 만족시키는 항목 만 포함하도록 필터링됩니다. SQL/롤 토토은 3 값 논리를 정의하므로 조건이 될 수 있습니다true, 거짓, 또는89899_89908. 그만큼알 수없는Value는 SQL과 동일한 역할을합니다null알 수 없음술어. 추가 경로 평가 단계는 필터 표현식이 반환 된 항목 만 사용합니다true.

필터 표현식에 사용할 수있는 기능 및 연산자는에 나열되어 있습니다.표 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 ()

이 표현식은 심박수 값이 높은 세그먼트가 포함되어 있거나 빈 시퀀스가 ​​포함 된 경우 트랙의 크기를 반환합니다.

PostgreSQL의 SQL/롤 토토 PATH 언어 구현에는 SQL/롤 토토 표준에서 다음 편차가 있습니다 :

  • SQL/롤 토토 표준은 필터에서만 사전 화를 허용하지만 경로 표현식은 부울 술어 일 수 있습니다. 이것은 구현에 필요합니다@@운영자. 예를 들어 다음롤 토토PATH표현식이 유효합니다PostgreSQL:

    $ .track.segments [*]. hr <70
  • 정규 표현 패턴의 해석에는 약간의 차이가 있습니다.Like_Regex필터에 설명 된대로섹션 9.16.2.3.

9.16.2.1. 엄격하고 LAX 모드#

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

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

  • 엄격한 - 구조적 오류가 발생하면 오류가 발생합니다.

LAX 모드는 롤 토토 데이터가 예상 스키마를 준수하지 않으면 롤 토토 문서 구조 및 경로 표현식의 일치를 용이하게합니다. 피연산자가 특정 작업의 요구 사항과 일치하지 않으면이 작업을 수행하기 전에 요소를 SQL/롤 토토 시퀀스로 변환하여 자동으로 SQL/롤 토토 어레이로 랩핑하거나 포장되지 않은 상태로 만들 수 있습니다. 게다가, 비교 운영자는 LAX 모드에서 오페라를 자동으로 풀므로 SQL/롤 토토 배열을 상자 외부로 비교할 수 있습니다. 크기 1의 배열은 유일한 요소와 동일하게 간주됩니다. 자동 풀림 랩핑은 다음과 같은 경우에만 수행되지 않습니다.

  • 경로 표현식에는type ()또는size ()배열의 유형과 요소 수를 반환하는 메소드.

  • 쿼리 된 롤 토토 데이터에는 중첩 어레이가 포함되어 있습니다. 이 경우 가장 바깥 쪽 배열 만 랩핑되지 않은 반면 모든 내부 배열은 변하지 않습니다. 따라서 암시 적 풀림 랩핑은 각 경로 평가 단계에서 한 레벨 만 다운 할 수 있습니다.

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

lax $ .track.segments.location

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

엄격한 $ .track.segments [*]. 위치

the.**액세서는 LAX 모드를 사용할 때 놀라운 결과로 이어질 수 있습니다. 예를 들어, 다음 쿼리는 모든 것을 선택합니다HR값 두 번 :

LAX $. **. HR

이것은이기 때문에 발생합니다..**Accessor는 두 가지를 선택합니다세그먼트배열 및 각 요소, 반면.hr액세서는 LAX 모드를 사용할 때 자동으로 배열을 풀립니다. 놀라운 결과를 피하려면 사용 권장합니다..**엄격한 모드에서만 액세서. 다음 쿼리는 각각을 선택합니다HR한 번만 가치 :

엄격한 $. **. HR

9.16.2.2. SQL/롤 토토 경로 연산자 및 방법#

표 9.50롤 토토PATH. 단체 연산자와 방법은 앞의 경로 단계로 인한 여러 값에 적용될 수 있지만 이진 연산자 (추가 등)는 단일 값에만 적용될 수 있습니다..

표 9.50. 롤 토토PATH운영자 및 방법

연산자/메소드

설명

예제

번호 + 번호번호

추가

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

+ 번호번호

Unary Plus (작동 없음); 추가와 달리 여러 값을 반복 할 수 있습니다

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

번호 - 번호번호

Subtraction

롤 토토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

번호 / 번호번호

Division

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

번호 % 번호번호

모듈로 (나머지)

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

value . type ()String

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

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

value . size ()번호

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

롤 토토B_PATH_QUERY ( ' "M": [11, 15]', '$ .M.Size ()')2

value . double ()번호

롤 토토 번호 또는 문자열에서 변환 된 근사 부동 소수점 번호

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

번호 . CEILING ()번호

가장 가까운 정수가 주어진 숫자보다 크거나 동일합니다

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

번호 . floor ()번호

가장 가까운 정수가 주어진 숫자보다 작거나 동일합니다

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

번호 . abs ()번호

지정된 숫자의 절대 값

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

String . dateTime ()dateTime_type(참고 참조)

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

롤 토토B_PATH_QUERY ( '[ "2015-8-1", "2015-08-12"]' ','$ [*]?"2015-8-1"

String . DateTime (템플릿)dateTime_type(참고 참조)

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

롤 토토B_PATH_QUERY_ARRAY ( '[ "12:30", "18:40"]', '$ [*]. DateTime ( "hh24 : mi")')["12:30:00", "18:40:00"]

개체 . keyValue ()배열

객체의 키-값 쌍은 세 개의 필드를 포함하는 객체 배열로 표시됩니다."키", "value""ID"; "id"객체의 고유 식별자입니다.

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


note

결과 유형dateTime ()dateTime (템플릿)메소드가 될 수 있습니다날짜, TIMETZ, Time, Timestamptz또는타임 스탬프. 두 방법 모두 결과 유형을 동적으로 결정합니다.

thedateTime ()메소드는 입력 문자열을 ISO 형식에 맞추려고 순차적으로 시도합니다날짜, TIMETZ, Time, Timestamptz타임 스탬프. 첫 번째 일치하는 형식으로 중지하고 해당 데이터 유형을 방출합니다.

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

thedateTime ()dateTime (템플릿)메소드와 동일한 구문 분석 규칙을 사용하십시오TO_TIMESTAMPSQL 기능 (참조PostgreSQL : 문서 : 16 : 9.8. 데이터 유형 스포츠 토토 결과 스포츠 토토 결과 기능), 세 가지 예외가 있습니다. 첫째, 이러한 방법은 타의 추종을 불허하는 템플릿 패턴을 허용하지 않습니다. 둘째, 템플릿 문자열에는 다음 분리기 만 허용됩니다 : 마이너스 부호, 기간, solidus (슬래시), 쉼표, 아포스트로피, 세미콜론, 콜론 및 공간. 셋째, 템플릿 문자열의 분리기는 입력 문자열과 정확히 일치해야합니다.

다른 날짜/시간 유형을 비교 해야하는 경우 암시 적 캐스트가 적용됩니다. 에이날짜값을 캐스트 할 수 있습니다타임 스탬프또는Timestamptz, 타임 스탬프캐스트 될 수 있습니다TimestamptzTimetoTIMETZ. 그러나 이러한 전환의 첫 번째 전환은 현재에 따라 다릅니다타임 존설정, 따라서 시간대 인식 내에서만 수행 할 수 있습니다롤 토토PATH기능.

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

표 9.51. 롤 토토PATH필터 표현 요소

술어/가치

설명

예제

value == value부울

평등 비교 (이것과 다른 비교 연산자는 모든 롤 토토 스칼라 값에 대해 작동)

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

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

value != value부울

value < value부울

비등성 비교

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

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

value < value부울

비교 이상의

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

value <= value부울

적은 비교보다 적은 비교

롤 토토B_PATH_QUERY_ARRAY ( '[ "A", "B", "C"],'$ [*]? (@ <= "B")[ "A", "B"]

value value부울

비교보다 큰 비교

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

value = value부울

더 큰 비교

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

true부울

롤 토토 Constanttrue

롤 토토B_PATH_QUERY ( '[ "name": "john", "parent": false, "name": "chris", "parent": true],'$ [*]? (@.parent == true) ')"name": "chris", "parent": true

false부울

롤 토토 Constant거짓

롤 토토B_PATH_QUERY ( '[ "name": "john", "parent": false, "name": "chris", "parent],'$ [*]? (@.parent == false) ')"이름": "John", "Parent": False

NULLvalue

롤 토토 ConstantNULL(SQL과 달리와 달리NULL정상적으로 작동)

롤 토토B_PATH_QUERY ( '[ "name": "mary", "job": null, "name": "michael", "job": "driver"],'$ [*]? (@.job == null) .name ')"Mary"

부울 && 부울부울

부울 및

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

부울 || 부울부울

부울 또는

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

! 부울부울

부울 아님

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

부울 알 수 없음부울

부울 상태인지 테스트합니다알 수없는.

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

String Like_Regex String [ 플래그 String ] → 부울

첫 번째 피연산자가 두 번째 피연산자에 의해 주어진 정규 표현과 일치하는지 여부를 테스트합니다.플래그문자 (참조섹션 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"],'$ [*]?[ "ABC", "ABDC", "ABDACB"]

String 시작 String부울

두 번째 피연산자가 첫 번째 피연산자의 초기 하위 스트링인지 테스트합니다.

롤 토토B_PATH_QUERY ( '[ "John Smith", "Mary Stone", "Bob Johnson"]' ','$ [*]? (@ "John")"John Smith"

존재 ( Path_Expression )부울

경로 표현식이 하나 이상의 SQL/롤 토토 항목과 일치하는지 테스트합니다. 보고알 수없는경로 표현이 오류가 발생하는 경우; 두 번째 예제는 이것을 사용하여 엄격한 모드에서 무시 키 오류를 피합니다.

롤 토토B_PATH_QUERY ( ' "x": [1, 2], "y": [2, 4]', 'strict $.*?[2, 4]

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


9.16.2.3. SQL/롤 토토 정규식#

SQL/롤 토토 경로 표현식 텍스트와 일치하는 텍스트와 일치하는Like_Regex필터. 예를 들어, 다음 SQL/롤 토토 PATH 쿼리는 영어 모음으로 시작하는 배열의 모든 문자열을 대상으로 비면적으로 일치합니다.

$ [*]? (@ like_regex "^[aeiou]"flag "i")

선택 사항플래그문자열은 문자 중 하나 이상을 포함 할 수 있습니다i케이스 감수성 일치,m허용^1233PostgreSQL : 문서 : 16 : 9.16. 롤 토토 기능 및 운영자350$Newlines에서 일치하려면s허용.Newline과 일치하려면q전체 패턴을 인용하려면 (동작을 간단한 부분 문자열 일치로 줄이기).

SQL/롤 토토 표준은 정기 표현에 대한 정의를 빌려Like_Regex연산자는 XQuery 표준을 사용합니다. PostgreSQL은 현재를 지원하지 않습니다.Like_Regex운영자. 따라서Like_Regex필터는에 설명 된 POSIX 정규식 엔진을 사용하여 구현됩니다섹션 9.7.3. 이것은 표준 SQL/롤 토토 동작의 다양한 사소한 불일치로 이어지며, 이는.섹션 9.7.3.8. 그러나 설명 된 플래그 레터 비 호환성은 SQL/롤 토토에 적용되지 않습니다. XQuery 플래그 문자가 Posix 엔진이 기대하는 것과 일치하도록 변환되므로.

의 패턴 인수를 명심하십시오.Like_Regex|섹션 8.14.7. 이는 특히 정규 표현식에서 사용하려는 백 슬래시가 두 배가되어야 함을 의미합니다. 예를 들어, 숫자 만 포함하는 루트 문서의 문자열 값과 일치하려면

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

정정 제출

문서에 올바른 것이 없다면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면