이 섹션은 다음을 설명합니다.
토토 베이 데이터 처리 및 생성을위한 기능 및 연산자
SQL/토토 베이 PATH LANGUAGE
SQL/토토 베이 표준에 대해 자세히 알아 보려면 참조[SQLTR-19075-6]. 지원되는 토토 베이 유형에 대한 자세한 내용은postgresql, 참조PostgreSQL : 문서 : 12 : 8.14. 무지개 토토 베이 유형.
표 9.44토토 베이 데이터 유형과 함께 사용할 수있는 연산자를 보여줍니다 (참조PostgreSQL : 문서 : 12 : 8.14. 무지개 토토 베이 유형).
표 9.44. 토토 베이
and토토 베이B
운영자
운영자 | 오른쪽 피연산자 유형 | 반환 유형 | 설명 | example | 예제 결과 |
---|---|---|---|---|---|
- |
int |
토토 베이 또는토토 베이B |
토토 베이 배열 요소 가져 오기 (0에서 인덱스, 끝에서 음수 정수 수) | '[ "a": "foo", "b": "bar", "c": "baz"]':: 토토 베이- 2 |
"c": "baz" |
- |
텍스트 |
토토 베이 또는토토 베이B |
key에 의해 토토 베이 객체 필드 가져 오기 | ' "a": "b": "foo"':: 토토 베이- 'a' |
"b": "foo" |
- |
int |
텍스트 |
토토 베이 배열 요소 as텍스트 |
'[1,2,3]':: 토토 베이- 2 |
3 |
- |
텍스트 |
텍스트 |
토토 베이 객체 필드를 가져옵니다.텍스트 |
' "A": 1, "B": 2':: 토토 베이- 'B' |
2 |
# |
텍스트 [] |
토토 베이 또는토토 베이B |
지정된 경로에서 토토 베이 개체 가져 오기 | ' "a": "b": "c": "foo"':: 토토 베이# 'a, b' |
"C": "foo" |
# |
텍스트 [] |
텍스트 |
지정된 경로에서 토토 베이 오브젝트를 가져옵니다텍스트 |
' "A": [1,2,3], "B": [4,5,6]':: 토토 베이# 'a, 2' |
3 |
두 연산자의 평행 변형이 있습니다.토토 베이
and토토 베이B
유형. 필드/요소/경로 추출 연산자는 왼쪽 입력과 동일한 유형을 반환합니다 (하나토토 베이
또는토토 베이B
), 반환으로 지정된 것을 제외하고.텍스트
, 값을 텍스트로 강요합니다. 토토 베이 입력에 요청과 일치 할 올바른 구조가없는 경우 필드/요소/경로 추출 연산자는 실패하지 않고 NULL을 반환합니다. 예를 들어 그러한 요소가 존재하지 않는 경우. 정수 토토 베이 배열 위트 스크립트를 허용하는 필드/요소/경로 추출 연산자는 모두 배열 끝에서 음수 첨자를 지원합니다.
표준 비교 연산자표 9.1|토토 베이B
, 그러나토토 베이
. 그들은 다음에 요약 된 B-tree 운영에 대한 주문 규칙을 따릅니다섹션 8.14.4. 참조 참조PostgreSQL : 문서 : 12 : 9.20. 윈 토토 기능집계 함수의 경우토토 베이_AGG
값을 토토 베이, 집계 함수로 기록하는 집계토토 베이_object_agg
어떤 값을 토토 베이 객체에 집계하고토토 베이B
등가,토토 베이B_AGG
and토토 베이B_OBJECT_AGG
.
일부 추가 연산자도에만 존재합니다토토 베이B
,표 9.45. 이러한 연산자 중 다수는에 의해 색인을 색인화 할 수 있습니다.토토 베이B
운영자 클래스. 에 대한 전체 설명토토 베이B
격리 및 존재 의미, 참조섹션 8.14.3. 섹션 8.14.4이러한 연산자가 어떻게 효과적으로 색인을 사용하는지 설명토토 베이B
데이터.
표 9.45. 추가의토토 베이B
연산자
운영자 | 오른쪽 피연산자 유형 | 설명 | example |
---|---|---|---|
@ |
토토 베이B |
왼쪽 토토 베이 값에는 최상위 수준의 오른쪽 토토 베이 경로/값 항목이 포함되어 있습니까? | ' "a": 1, "b": 2':: 토토 베이b @ ' "b": 2':: 토토 베이b |
<@ |
토토 베이B |
왼쪽 토토 베이 경로/값 항목은 오른쪽 토토 베이 값 내에서 최상위 레벨에 포함되어 있습니까? | ' "b": 2':: jsonb <@ ' "a": 1, "b": 2':: jsonb |
? |
텍스트 |
String토토 베이 값 내에서 최상위 키로 존재합니까? | ' "a": 1, "b": 2':: 토토 베이b? '비' |
? | |
텍스트 [] |
이 배열을 수행문자열최상위 키로 존재합니까? | ' "a": 1, "b": "2,"c ": 3':: jsonb? | | 배열 [ 'b', 'c'] |
? & |
텍스트 [] |
이 모든 배열을 수행문자열최상위 키로 존재합니까? | '[ "A", "B"]':: 토토 베이B? & ARRAY [ 'A', 'B'] |
|| |
토토 베이B |
두 가지토토 베이B 새로운 값토토 베이B value |
'[ "A", "B"]':: 토토 베이B || '[ "C", "D"]' ':: 토토 베이B |
- |
텍스트 |
키/값 쌍 삭제 또는String왼쪽 피연산자의 요소. 키/값 쌍은 키 값에 따라 일치합니다. | ' "a": "b"':: 토토 베이b- 'a' |
- |
텍스트 [] |
다중 키/값 쌍을 삭제하거나String왼쪽 피연산자의 요소. 키/값 쌍은 키 값에 따라 일치합니다. | ' "a": "b", "c": "d"':: 토토 베이b- 'a, c':: text [] |
- |
정수 |
지정된 인덱스로 배열 요소를 삭제합니다 (끝에서 음의 정수 수). 최상위 컨테이너가 배열이 아닌 경우 오류를 던집니다. | '[ "A", "B"]':: 토토 베이B -1 |
#- |
텍스트 [] |
지정된 경로로 필드 또는 요소를 삭제합니다 (토토 베이 어레이의 경우 끝까지 음수 정수 수) | '[ "a", "b": 1]':: jsonb #- '1, b' |
@? |
토토 베이PATH |
토토 베이 PATH가 지정된 토토 베이 값에 대한 항목을 반환합니까? | ' "A": [1,2,3,4,5]':: 토토 베이B @? '$ .a [*]? (@ 2) ' |
@@ |
토토 베이PATH |
지정된 토토 베이 값에 대한 토토 베이 PATH PRECTICE의 결과를 반환합니다. 결과의 첫 번째 항목 만 고려됩니다. 결과가 부울하지 않으면NULL 반품. |
' "a": [1,2,3,4,5]':: jsonb @@ '$ .a [*] 2' |
the||
연산자는 키의 결합을 포함하는 개체를 생성하여 두 개의 토토 베이 객체를 연결하여 중복 키가있을 때 두 번째 객체의 값을 취합니다. 다른 모든 경우는 토토 베이 어레이를 생성합니다. 첫째, 비 어레이 입력이 단일 요소 배열로 변환 된 다음 두 배열이 연결됩니다. 그것은 재귀 적으로 작동하지 않습니다. 최상위 배열 또는 객체 구조 만 병합됩니다.
the@?
and@@
연산자는 다음 오류를 억제합니다. 객체 필드 또는 배열 요소, 예기치 않은 토토 베이 항목 유형 및 숫자 오류. 이 동작은 다양한 구조의 토토 베이 문서 모음을 검색하는 동안 도움이 될 수 있습니다.
표 9.46작성에 사용할 수있는 기능을 표시토토 베이
and토토 베이B
값. (에 대한 동등한 함수는 없습니다토토 베이B
,row_to_토토 베이
andarray_to_토토 베이
기능. 그러나TO_토토 베이B
함수는 이러한 함수와 거의 동일한 기능을 제공합니다.)
표 9.46. 토토 베이 제작 기능
기능 | 설명 | example | 예제 결과 |
---|---|---|---|
|
값을 다시 반환합니다토토 베이 또는토토 베이B . 배열 및 복합재는 어레이 및 객체로 (재귀 적으로) 변환됩니다. 그렇지 않으면 유형에서로 캐스트가있는 경우토토 베이 , 캐스트 함수는 변환을 수행하는 데 사용됩니다. 그렇지 않으면 스칼라 값이 생성됩니다. 숫자, 부울 또는 널 값 이외의 스칼라 유형의 경우 텍스트 표현이 유효한 방식으로 사용됩니다토토 베이 또는토토 베이B value. |
TO_토토 베이 ( '프레드는 "안녕하세요."':: 텍스트) |
"Fred Said \"Hi. \ "" |
array_to_토토 베이 (anyArray [, pretty_bool]) |
배열을 토토 베이 배열로 반환합니다. PostgreSQL 다차원 배열은 토토 베이 배열 배열이됩니다. 라인 피드는 Dimension-1 요소간에 추가됩니다.pretty_bool 진실입니다. |
array_to_토토 베이 ( '1,5, 99,100':: int []) |
[[1,5], [99,100]] |
row_to_토토 베이 (레코드 [, pretty_bool]) |
행을 토토 베이 객체로 반환합니다. 라인 피드는 레벨 1 요소간에 추가됩니다.pretty_bool 진실입니다. |
row_to_토토 베이 (Row (1, 'foo')) |
"f1": 1, "f2": "foo" |
|
variadic 인수 목록에서 아마도 이질적인 토토 베이 배열을 구축합니다. | 토토 베이_BUILD_ARRAY (1,2, '3', 4,5) |
[1, 2, "3", 4, 5] |
|
Variadic 인수 목록에서 토토 베이 객체를 빌드합니다. 컨벤션별로, 인수 목록은 교대 키와 값으로 구성됩니다. | 토토 베이_build_object ( 'foo', 1, 'bar', 2) |
"foo": 1, "bar": 2 |
|
텍스트 배열에서 토토 베이 객체를 빌드합니다. 배열에는 짝수의 멤버가있는 정확한 1 차원이 있어야하며,이 경우 각각의 내부 배열이 정확히 두 개의 요소를 갖도록 키/값 쌍으로 간주되도록 두 차원으로 간주됩니다.. |
|
"a": "1", "b": "def", "c": "3.5" |
|
이 형태의토토 베이_object 두 개의 별도 배열에서 키와 값을 쌍으로 가져옵니다. 다른 모든 측면에서 그것은 하나의 변호 형식과 동일합니다. |
토토 베이_object ( 'a, b', '1,2') |
"A": "1", "B": "2" |
array_to_토토 베이
androw_to_토토 베이
동일한 동작to_토토 베이
꽤 인쇄 옵션을 제공하지 않는 경우. 설명 된 행동TO_토토 베이
마찬가지로 다른 토토 베이 생성 기능에 의해 변환 된 각 개별 값에 적용됩니다.
thePostgreSQL : 문서 : 12 : F.16. 와이즈Extension은에서 캐스트되었습니다.hstore
to토토 베이
HSTORE
토토 베이 생성 함수를 통해 변환 된 값은 원시 문자열 값이 아닌 토토 베이 객체로 표시됩니다.
표 9.47처리 할 수있는 기능을 표시토토 베이
and토토 베이B
값.
표 9.47. 토토 베이 처리 기능
기능 | 반환 유형 | 설명 | example | 예제 결과 |
---|---|---|---|---|
|
int |
가장 바깥 쪽 토토 베이 어레이의 요소 수를 반환합니다. | 토토 베이_array_length ( '[1,2,3, "f1": 1, "f2": [5,6], 4]') |
5 |
|
|
가장 바깥 쪽 토토 베이 객체를 키/값 쌍 세트로 확장합니다. | 선택 *에서 토토 베이_EACH ( ' "a": "foo", "b": "bar"') |
키 | 값 -----+------- A | "foo" B | "술집" |
|
키 텍스트 설정, 값 텍스트 |
가장 바깥 쪽 토토 베이 객체를 키/값 쌍 세트로 확장합니다. 반환 된 값은 유형입니다텍스트 . |
토토 베이_each_text ( ' "a": "foo", "b": "bar"')에서 선택 * 선택 * |
키 | 값 -----+------- A | foo B | 술집 |
|
|
path_elems (동등한# 운영자). |
토토 베이_extract_path ( ' "f2": "f3": 1, "f4": "f5": 99, "f6": "foo"', 'f4') |
"f5": 99, "f6": "foo" |
|
텍스트 |
path_elems as텍스트 (동등한# 운영자). |
json_extract_path_text ( ' "f2": "f3": 1, "f4": "f5": 99, "f6": "foo"', 'f4', 'f6') |
foo |
|
텍스트 설정 |
가장 바깥 쪽 토토 베이 객체에서 키 세트를 반환합니다. | 토토 베이_object_keys ( ' "f1": "abc", "f2": "f3": "a", "f4": "b"') |
토토 베이_object_keys ----------------- F1 F2 |
|
Anylement |
객체를 확장합니다From_토토 베이 열이 열이 정의 된 레코드 유형과 일치하는 행으로Base (아래 참고 참조). |
토토 베이_populate_record에서 * 선택 * 선택 *에서 선택 * 선택 |
a | B | 기음 ---+-----------+------------ 1 | 2, "a b" | (4, "A B C") |
|
모든 요소 설정 |
객체의 가장 바깥 쪽 배열을 확장From_토토 베이 열이 정의 된 레코드 유형과 일치하는 행 세트에Base (아래 참고 참조). |
토토 베이_populate_recordset에서 * 선택 * 선택 * |
a | 비 ---+--- 1 | 2 3 | 4 |
|
|
토토 베이 배열을 토토 베이 값 세트로 확장합니다. | 선택 *에서 토토 베이_array_elements ( '[1, true, [2, false]' ') |
값 ---------- 1 진실 [2, false] |
|
텍스트 설정 |
토토 베이 배열을 세트로 확장합니다텍스트 값. |
선택 *에서 json_array_elements_text ( '[ "foo", "bar"]') |
값 ---------- foo 술집 |
|
텍스트 |
가장 바깥 쪽 json 값의 유형을 텍스트 문자열로 반환합니다. 가능한 유형은개체 , 배열 , String , 번호 , 부울 및NULL . |
토토 베이_typeof ( '-123.4') |
번호 |
|
레코드 |
토토 베이 객체에서 임의의 레코드를 작성합니다 (아래 참고 참조). 모든 기능이 반환되는 것과 마찬가지로레코드 , 발신자는 레코드의 구조를 AN으로 명시 적으로 정의해야합니다as 절. |
json_to_record에서 * 선택 *에서 선택 * 선택 * json_to_record ( ' "a": 1, "b": [1,2,3], "c": [1,2,3], "e": "bar", "r": "a": 123, "b": "a b c"') x (a int, b int, c int, c int) myrowtype) |
a | B | C | d | 아르 자형 ---+--------+--------+---+------------- 1 | [1,2,3] | 1,2,3 | | (123, "A B C") |
|
기록 |
토토 베이 배열로부터 임의의 레코드 세트를 작성합니다 (아래 참고 참조). 모든 기능이 반환되는 것과 마찬가지로레코드 , 발신자는 레코드의 구조를 AN으로 명시 적으로 정의해야합니다as 절. |
json_to_recordset ( '[ "a": 1, "b": "foo", "a": "2", "c": "bar"]')))))); |
a | 비 ---+----- 1 | foo 2 | |
|
|
반환From_토토 베이 null 값이 생략 된 모든 객체 필드가 있습니다. 다른 널 값은 손대지 않았습니다. |
토토 베이_STRIP_NULLS ( '[ "f1": 1, "f2": null, 2, null, 3]') |
[ "f1": 1, 2, null, 3] |
|
|
반환대상 PATH 대체new_value 또는new_value if 추가create_missing true (기본값은true ) 및 지정된 항목PATH 존재하지 않습니다. 경로 지향 연산자와 마찬가지로,에 나타나는 부정적인 정수PATH 토토 베이 어레이의 끝에서 카운트. |
|
|
|
|
반환대상 withnew_value 삽입. 만약에대상 섹션에 의해 지정된PATH jsonb 배열에 있습니다.new_value 대상 전 또는 IF 이후에 삽입됩니다insert_after true (기본값은거짓 ). 만약에대상 섹션에 의해 지정된 섹션PATH 토토 베이b 객체에 있습니다.new_value 대상 존재하지 않습니다. 경로 지향 연산자와 마찬가지로,에 나타나는 부정적인 정수Path 토토 베이 어레이의 끝에서 카운트. |
|
|
|
|
반환From_토토 베이 들여 쓰기 토토 베이 텍스트 |
토토 베이B_PRETTY ( '[ "f1": 1, "f2": null, 2, null, 3]') |
[ "F1": 1, "F2": NULL , 2, 널, 3 ] |
|
부울 |
토토 베이 PATH가 지정된 토토 베이 값에 대해 항목을 반환하는지 확인합니다. |
|
|
|
부울 |
지정된 토토 베이 값에 대한 토토 베이 PATH PRECTICE 결과를 반환합니다. 결과의 첫 번째 항목 만 고려됩니다. 결과가 부울하지 않으면NULL 반환됩니다. |
|
|
|
setof jsonb |
지정된 토토 베이 값에 대해 토토 베이 경로에 의해 반환 된 모든 토토 베이 항목을 가져옵니다. |
|
토토 베이B_PATH_QUERY ----------------- 2 3 4 |
|
토토 베이B |
지정된 토토 베이 값에 대해 토토 베이 PATH에 의해 반환 된 모든 토토 베이 항목을 가져옵니다. |
|
|
|
토토 베이B |
지정된 토토 베이 값에 대해 토토 베이 경로에 의해 반환 된 첫 번째 토토 베이 항목을 가져옵니다. 보고NULL 결과 없음. |
|
|
이러한 기능과 연산자 중 다수는 토토 베이 문자열의 유니 코드 이스케이프를 적절한 단일 문자로 변환합니다. 입력이 유형 인 경우 문제가 아닌 경우토토 베이B
, 전환이 이미 완료 되었기 때문에; 하지만토토 베이
입력, 이로 인해 언급 된대로 오류가 발생할 수 있습니다.PostgreSQL : 문서 : 12 : 8.14. 무지개 토토 베이 유형.
함수토토 베이 [B] _populate_record
, 토토 베이 [B] _populate_recordset
, 토토 베이 [B] _TO_RECORD
및토토 베이 [B] _TO_RECORDSET
토토 베이 객체 또는 객체 배열에서 작동하고 이름이 출력 행 유형의 열 이름과 일치하는 키와 관련된 값을 추출합니다. 출력 열 이름에 해당하지 않는 객체 필드는 무시되며 객체 필드와 일치하지 않는 출력 열에는 널로 채워집니다. 토토 베이 값을 SQL 유형의 출력 열로 변환하려면 다음 규칙이 순서대로 적용됩니다.
토토 베이 NULL 값은 모든 경우에 SQL NULL로 변환됩니다.
출력 열이 유형 인 경우토토 베이
또는토토 베이B
, 토토 베이 값은 정확히 재현되었습니다.
출력 열이 합성 (행) 유형이고 토토 베이 값이 토토 베이 객체 인 경우 객체의 필드는이 규칙의 재귀 적 응용에 의해 출력 행 유형의 열로 변환됩니다..
마찬가지로 출력 열이 배열 유형이고 토토 베이 값이 토토 베이 배열 인 경우 토토 베이 배열의 요소는이 규칙의 재귀 적 응용에 의해 출력 배열의 요소로 변환됩니다..
그렇지 않으면, 토토 베이 값이 문자열 문자 인 경우 문자열의 내용은 열의 데이터 유형의 입력 변환 함수에 공급됩니다..
그렇지 않으면, 토토 베이 값의 일반 텍스트 표현은 열의 데이터 유형의 입력 변환 함수에 공급됩니다.
이러한 함수의 예제는 상수를 사용하는 반면, 일반적인 사용은에서 테이블을 참조하는 것입니다.From
절 중 하나를 사용하고 그 중 하나를 사용하십시오토토 베이
또는토토 베이B
함수에 대한 인수로서 열. 그런 다음 추출 된 주요 값은 쿼리의 다른 부분에서 참조 할 수 있습니다.어디
절 및 대상 목록. 이러한 방식으로 여러 값을 추출하면 키 당 연산자와 별도로 추출하는 것보다 성능이 향상 될 수 있습니다.
의 모든 항목PATH
매개 변수토토 베이B_SET
뿐만 아니라토토 베이B_INSERT
마지막 항목을 제외하고대상
. 만약에create_missing
거짓입니다.PATH
매개 변수토토 베이B_SET
있어야합니다. 이러한 조건이 충족되지 않으면대상
변경되지 않은 반품.
마지막 경로 항목이 객체 키 인 경우, 새로운 값이 없으면 생성됩니다. 마지막 경로 항목이 배열 인덱스 인 경우 양수 인 경우 설정할 항목은 왼쪽에서 계산하여 찾아서 오른쪽에서 계산하여 음수 인 경우 --1
가장 오른쪽 요소 등을 지정합니다. 항목이 범위를 벗어난 경우 -array_length.
the토토 베이_typeof
기능NULL
반환 값은 SQL NULL과 혼동해서는 안됩니다. 전화하는 동안토토 베이_typeof ( 'null':: json)
복귀 할 것입니다NULL
, Calling토토 베이_typeof (null :: json)
SQL NULL을 반환합니다.
인수가토토 베이_STRIP_NULLS
모든 객체에 중복 필드 이름을 포함하면 결과가 발생하는 순서에 따라 의미 적으로 다소 다를 수 있습니다. 이것은에 대한 문제가 아닙니다.토토 베이B_STRIP_NULLS
이후토토 베이B
57397_57447
the토토 베이b_path_exists
, 토토 베이B_PATH_MATCH
, 토토 베이B_PATH_QUERY
, 토토 베이B_PATH_QUERY_ARRAY
및토토 베이B_PATH_QUERY_FIRST
함수는 선택 사항이 있습니다vars
andSilent
인수.
인 경우vars
인수가 지정되어 있습니다. a로 대체 할 지명 된 변수가 포함 된 객체를 제공합니다토토 베이PATH
표현.
Silent
인수가 지정되어 있으며true
값, 이러한 함수는와 동일한 오류를 억제합니다.@?
및@@
연산자.
SQL/토토 베이 경로 표현식 XML에 대한 SQL 액세스에 사용되는 XPath 표현식과 유사한 토토 베이 데이터에서 검색 할 항목을 지정합니다. 안에PostgreSQL, 경로 표현식은로 구현됩니다.토토 베이PATH
데이터 유형 및에 설명 된 요소를 사용할 수 있습니다섹션 8.14.6.
토토 베이 쿼리 함수 및 연산자가 제공된 경로 표현식을 전달합니다경로 엔진평가 용. 표현식이 쿼리 된 토토 베이 데이터와 일치하면 해당 SQL/토토 베이 항목이 반환됩니다. 경로 표현식은 SQL/토토 베이 Path Language로 작성되며 산술 표현 및 기능도 포함 할 수도 있습니다. 쿼리 함수 제공된 표현식을 텍스트 문자열로 취급하므로 단일 따옴표로 둘러싸여 있어야합니다.
경로 표현식은에 의해 허용되는 일련의 요소로 구성됩니다.토토 베이PATH
데이터 유형. 경로 표현식은 왼쪽에서 오른쪽으로 평가되지만 괄호를 사용하여 작업 순서를 변경할 수 있습니다. 평가가 성공하면 SQL/토토 베이 항목 시퀀스 (SQL/토토 베이 시퀀스)가 생성되고 평가 결과가 지정된 계산을 완료하는 토토 베이 쿼리 기능으로 반환됩니다.
쿼리 할 토토 베이 데이터를 참조하려면 (컨텍스트 항목), 사용$
경로 표현식에 로그인하십시오. 한 명 이상이 뒤 따릅니다액세서 연산자, 컨텍스트 항목의 내용을 검색하기 위해 토토 베이 구조 레벨을 레벨별로 내려갑니다. 다음에 나오는 각 연산자는 이전 평가 단계의 결과를 다룹니다.
예를 들어, 다음과 같이 구문 분석하려는 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 [*]. 위치'
첫 번째 세그먼트의 좌표 만 반환하려면 해당 첨자를 지정할 수 있습니다.[]
액세서 연산자. SQL/토토 베이 어레이는 0과 관련이 있습니다.
'$. track.segments [0] .location'
각 경로 평가 단계의 결과는 하나 이상으로 처리 할 수 있습니다토토 베이PATH
운영자 및 메소드에 나열섹션 9.15.2.3. 각 메소드 이름에는 점이 뒤 바져 있어야합니다. 예를 들어 배열 크기를 얻을 수 있습니다.
'$. track.segments.size ()
사용의 더 많은 예는토토 베이PATH
경로 표현식 내의 연산자 및 메소드, 참조섹션 9.15.2.3.
경로를 정의 할 때 하나 이상을 사용할 수도 있습니다필터 표현식그와 유사한 작동여기서
SQL의 조항. 필터 표현식은 물음표로 시작하여 괄호로 조건을 제공합니다.
? (조건
)
필터 표현식은 적용되는 경로 평가 단계 직후에 지정해야합니다. 이 단계의 결과는 제공된 조건을 만족시키는 항목 만 포함하도록 필터링됩니다. SQL/토토 베이은 3 값 논리를 정의하므로 조건이 될 수 있습니다true
, 거짓
또는알 수없는
. 그만큼알 수없는
값은 SQL과 같은 역할을합니다null
알 수 없음
술어. 추가 경로 평가 단계는 필터 표현식이 반환되는 항목 만 사용합니다true
.
필터 표현식에 사용할 수있는 기능 및 연산자표 9.49. 필터링되는 경로 평가 결과는로 표시됩니다.@
변수. 더 낮은 둥지 레벨에 저장된 토토 베이 요소를 참조하려면 이후에 한 명 이상의 액세서 연산자를 추가하십시오.@
.
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) '
서로 안에 필터 표현을 중첩 할 수도 있습니다 :
'$. 트랙? (존재합니다 (@. segments [*]? (@.hr 130)). segments.size ()
이 표현식은 심박수 값이 높은 세그먼트가 포함되어 있거나 빈 시퀀스가 포함 된 경우 트랙의 크기를 반환합니다..
PostgreSQL의 SQL/토토 베이 PATH Language의 구현 SQL/토토 베이 표준에서 다음 편차가 있습니다 :
.dateTime ()
항목 방법은 아직 구현되지 않았지만 주로 불변하기 때문에토토 베이PATH
함수 및 연산자는 일부 DateTime 작업에 사용되는 Session Timezone을 참조 할 수 없습니다. DateTime 지원이 추가됩니다토토 베이PATH
향후 버전의PostgreSQL.
SQL/토토 베이 표준은 필터에서만 곤경에 처한다. 이것은 구현에 필요합니다@@
운영자. 예를 들어 다음토토 베이PATH
표현식이 유효합니다PostgreSQL:
'$. track.segments [*]. hr <70'
정규 표현 패턴의 해석에는 약간의 차이가 있습니다.Like_Regex
필터에 설명 된대로섹션 9.15.2.2.
토토 베이 데이터를 쿼리 할 때 경로 표현식이 실제 토토 베이 데이터 구조와 일치하지 않을 수 있습니다. 배열의 객체 또는 요소의 존재하지 않는 멤버에 액세스하려는 시도는 구조적 오류가 발생합니다. 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
SQL/토토 베이 PATH 표현식 텍스트를 정기적으로 표현할 수있는Like_Regex
필터. 예를 들어, 다음 SQL/토토 베이 PATH 쿼리는 영어 모음으로 시작하는 배열의 모든 문자열을 대상으로 비면적으로 일치합니다.
'$ [*]? (@ like_regex "^[aeiou]"flag "i") '
선택 사항플래그
문자열은 문자 중 하나 이상을 포함 할 수 있습니다i
사례에 민감한 경기,m
허용^
and$
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.6. 이는 특히 정규 표현식에서 사용하려는 백 슬래시가 두 배가되어야 함을 의미합니다. 예를 들어, 숫자 만 포함하는 루트 문서의 문자열 값과 일치하려면
$.*? (@ like_regex "^\\ d+$")
표 9.48토토 베이PATH
. 표 9.49사용 가능한 필터 표현식 요소를 보여줍니다.
표 9.48. 토토 베이PATH
운영자 및 방법
연산자/메소드 | 설명 | 토토 베이 예제 | 예제 쿼리 | 결과 |
---|---|---|---|---|
+ (unery) |
SQL/토토 베이 시퀀스를 반복하는 연산자 | "x": [2.85, -14.7, -9.4] |
+ $ .x.floor () |
2, -15, -10 |
- (unery) |
SQL/토토 베이 시퀀스를 반복하는 마이너스 연산자 | "x": [2.85, -14.7, -9.4] |
- $ .x.floor () |
-2, 15, 10 |
+ (바이러스) |
추가 | [2] |
2 + $ [0] |
4 |
- (binary) |
Subtraction | [2] |
4- $ [0] |
2 |
* |
곱셈 | [4] |
2 * $ [0] |
8 |
/ |
Division | [8] |
$ [0] / 2 |
4 |
% |
모듈러스 | [32] |
$ [0] % 10 |
2 |
type () |
SQL/토토 베이 항목의 유형 | [1, "2", ] |
$ [*]. type () |
"번호", "문자열", "개체" |
size () |
SQL/토토 베이 항목의 크기 | "m": [11, 15] |
$ .M.Size () |
2 |
double () |
SQL/토토 베이 번호 또는 문자열에서 변환 된 근사 부동 소수점 번호 | "Len": "1.9" |
$ .len.double () * 2 |
3.8 |
CEILING () |
SQL/토토 베이 번호보다 크거나 가장 가까운 정수 | "H": 1.3 |
$ .h.ceiling () |
2 |
floor () |
가장 가까운 정수는 SQL/토토 베이 번호보다 작거나 동일합니다 | "H": 1.3 |
$ .h.floor () |
1 |
abs () |
SQL/토토 베이 번호의 절대 값 | "z": -0.3 |
$ .z.abs () |
0.3 |
keyValue () |
3 개의 필드를 포함하는 항목의 배열로 표시되는 오브젝트의 키 값 쌍 시퀀스 ("키" , "value" 및"ID" )."id" 객체 키 값 쌍의 고유 식별자입니다. |
"x": "20", "y": 32 |
$ .keyValue () |
"키": "x", "value": "20", "id": 0, "키": "y", "value": 32, "id": 0 |
표 9.49. 토토 베이PATH
필터 표현 요소
value/prectice | 설명 | 토토 베이 예제 | 예제 쿼리 | 결과 |
---|---|---|---|---|
== |
평등 연산자 | [1, 2, 1, 3] |
$ [*]? (@ == 1) |
1, 1 |
! = |
비평가 운영자 | [1, 2, 1, 3] |
$ [*]? (@! = 1) |
2, 3 |
< |
비평가 연산자 (동일! = ) |
[1, 2, 1, 3] |
$ [*]? (@ < 1) |
2, 3 |
< |
연산자보다 | [1, 2, 3] |
$ [*]? (@ <2) |
1 |
<= |
적은 운영자 | [1, 2, 3] |
$ [*]? (@ <= 2) |
1, 2 |
|
더 큰 운영자 | [1, 2, 3] |
$ [*]? (@ 2) |
3 |
= |
더 큰 운영자 | [1, 2, 3] |
$ [*]? (@ = 2) |
2, 3 |
true |
토토 베이과 비교하는 데 사용되는 값true 리터럴 |
[ "name": "john", "parent": "false, "name ":"chris ","parent ": true] |
$ [*]? (@.parent == true) |
"name": "chris", "parent": true |
false |
토토 베이과 비교하는 데 사용되는 값false 리터럴 |
[ "name": "john", "parent": "false, "name ":"chris ","parent ": true] |
$ [*]? (@.parent == false) |
"이름": "John", "Parent": False |
NULL |
토토 베이과 비교하는 데 사용되는 값NULL value |
[ "name": "mary", "job": null, "name": "michael", "job": "driver"] |
$ [*]? (@.job == null) .name |
"Mary" |
&& |
부울 및 | [1, 3, 7] |
$ [*]? ( @ 1 && @ <5) |
3 |
|| |
부울 또는 | [1, 3, 7] |
$ [*]? ( @ <1 || @ 5) |
7 |
! |
부울 아님 | [1, 3, 7] |
$ [*]? (! (@ <5)) |
7 |
Like_Regex |
첫 번째 피연산자가 두 번째 피연산자가 주어진 정규 표현과 일치하는지 여부를 테스트합니다.플래그 문자 (참조섹션 9.15.2.2) |
[ "ABC", "ABD", "ABDC", "ABDACB", "BABC"] |
$ [*]? (@ like_regex "^ab.*c"flag "i") |
"ABC", "ABDC", "ABDACB" |
시작 |
두 번째 피연산자가 첫 번째 피연산자의 초기 기판인지 테스트 | [ "John Smith", "Mary Stone", "Bob Johnson" |
$ [*]? (@는 "John"으로 시작합니다) |
"John Smith" |
존재 |
경로 표현이 하나 이상의 SQL/토토 베이 항목과 일치하는지 테스트 | "x": [1, 2], "y": [2, 4] |
엄격한 $.*? (존재합니다 (@? (@ [*] 2)) |
2, 4 |
알 수 없음 |
부울 상태인지 테스트알 수없는 |
[-1, 2, 7, "Infinity"] |
$ [*]? ((@ 0) 알 수 없음) |
"Infinity" |