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

9.16. 스포츠 토토 함수 및 연산자

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

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

  • SQL/스포츠 토토 경로 언어

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

9.16.1. 스포츠 토토 데이터 처리 및 생성

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

표 9.44. 스포츠 토토그리고스포츠 토토b연산자

운영자

설명

스포츠 토토 - 정수스포츠 토토

스포츠 토토b - 정수스포츠 토토b

추출물nJSON 배열의'번째 요소(배열 요소는 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 - 정수텍스트

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

'[1,2,3]'::스포츠 토토 - 23

스포츠 토토 - 텍스트텍스트

스포츠 토토b - 텍스트텍스트

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

'"a":1,"b":2'::스포츠 토토 - 'b'2

스포츠 토토 # 텍스트[]스포츠 토토

스포츠 토토b # 텍스트[]스포츠 토토b

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

'"a": "b": ["foo","bar"]'::스포츠 토토 # 'a,b,1'"바"

스포츠 토토 # 텍스트[]텍스트

스포츠 토토b # 텍스트[]텍스트

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

'"a": "b": ["foo","bar"]'::스포츠 토토 # 'a,b,1'


참고

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

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

표 9.45. 추가의스포츠 토토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 ? 텍스트부울

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

'"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

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

'["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부울

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

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


참고

스포츠 토토path연산자@?그리고@@객체 필드 또는 배열 요소 누락, 예상치 못한 스포츠 토토 항목 유형, 날짜 시간 및 숫자 오류 등의 오류를 억제합니다. 그만큼스포츠 토토path26535_26717

표 9.46구성에 사용할 수 있는 함수를 표시합니다.스포츠 토토그리고스포츠 토토b값.

표 9.46. JSON 생성 함수

기능

설명

to_스포츠 토토 ( 모든 요소 ) → 스포츠 토토

to_스포츠 토토b ( 모든 요소 ) → 스포츠 토토b

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

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

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

array_to_스포츠 토토 ( 임의배열 [, 부울 ] ) → 스포츠 토토

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

array_to_스포츠 토토('1,5,99,100'::int[])[[1,5],[99,100]]

row_to_스포츠 토토 ( 기록 [, 부울 ] ) → 스포츠 토토

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

row_to_스포츠 토토(row(1,'foo'))"f1":1,"f2":"foo"

스포츠 토토_build_array ( VARIADIC "아무거나" ) → 스포츠 토토

스포츠 토토b_build_array ( VARIADIC "아무거나" ) → 스포츠 토토b

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

스포츠 토토_build_array(1, 2, 'foo', 4, 5)[1, 2, "foo", 4, 5]

스포츠 토토_build_object ( VARIADIC "아무거나" ) → 스포츠 토토

스포츠 토토b_build_object ( VARIADIC "아무거나" ) → 스포츠 토토b

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

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

스포츠 토토_object ( 텍스트[] ) → 스포츠 토토

스포츠 토토b_object ( 텍스트[] ) → 스포츠 토토b

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

스포츠 토토_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 : 문서 : 14 : F.16. 스포츠 토토 사이트확장 프로그램이 다음에서 캐스트되었습니다.hstore스포츠 토토그러니까hstore스포츠 토토 생성 함수를 통해 변환된 값은 기본 문자열 값이 아닌 스포츠 토토 개체로 표시됩니다.


표 9.47처리에 사용할 수 있는 기능을 표시스포츠 토토그리고스포츠 토토b값.

표 9.47. JSON 처리 함수

기능

설명

스포츠 토토_array_elements ( 스포츠 토토 ) → 스포츠 토토 집합

스포츠 토토b_array_elements ( 스포츠 토토b ) → 스포츠 토토b 집합

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

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

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

스포츠 토토_array_elements_text ( 스포츠 토토 ) → 텍스트 집합

스포츠 토토b_array_elements_text ( 스포츠 토토b ) → 텍스트 집합

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

스포츠 토토_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

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

스포츠 토토_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 텍스트[] ) → 텍스트

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

스포츠 토토_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그러면 포함된 값은 일치하지 않는 열에 사용됩니다.

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

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

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

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

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

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

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

아래 예에서는 상수 JSON 값을 사용하지만 일반적으로 다음을 참조하는 데 사용됩니다.스포츠 토토또는스포츠 토토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 ) → 모든 요소의 집합

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

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

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

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

스포츠 토토_to_record ( 스포츠 토토 ) → 기록

스포츠 토토b_to_record ( 스포츠 토토b ) → 기록

최상위 JSON 개체를 다음에 의해 정의된 복합 유형이 있는 행으로 확장합니다.AS절. (모든 함수가 반환되는 것과 마찬가지로기록, 호출 쿼리는 다음을 사용하여 레코드 구조를 명시적으로 정의해야 합니다.AS절.) 출력 레코드는 위에서 설명한 것과 동일한 방식으로 JSON 개체의 필드에서 채워집니다.스포츠 토토[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 마이로우타입)

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

스포츠 토토_to_recordset ( 스포츠 토토 ) → 레코드 세트

스포츠 토토b_to_recordset ( 스포츠 토토b ) → 레코드 세트

객체의 최상위 JSON 배열을 다음으로 정의된 복합 유형이 있는 행 집합으로 확장합니다.AS절. (모든 함수가 반환되는 것과 마찬가지로기록, 호출 쿼리는를 사용하여 레코드 구조를 명시적으로 정의해야 합니다.AS절.) JSON 배열의 각 요소는 위에서 설명한 대로 처리됩니다.스포츠 토토[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(기본값)이며 다음으로 지정된 항목입니다.경로존재하지 않습니다. 경로의 모든 이전 단계가 존재해야 합니다. 그렇지 않으면대상변경되지 않은 상태로 반환됩니다. 경로 지향 연산자와 마찬가지로,경로JSON 배열의 끝부터 계산됩니다. 마지막 경로 단계가 범위를 벗어난 배열 인덱스인 경우 및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_afterfalse(기본값)이거나 그 이후인 경우insert_after사실입니다. 에서 지정한 항목인 경우경로객체 필드입니다.new_value개체에 해당 키가 아직 포함되어 있지 않은 경우에만 삽입됩니다. 경로의 모든 이전 단계가 존재해야 합니다. 그렇지 않으면대상은 변경되지 않은 채 반환됩니다. 경로 지향 연산자와 마찬가지로,경로JSON 배열의 끝부터 계산합니다. 마지막 경로 단계가 범위를 벗어난 배열 인덱스인 경우, 인덱스가 음수이면 배열의 시작 부분에 새 값이 추가되고, 양수이면 배열의 끝에 추가됩니다.

스포츠 토토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

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

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

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

JSON 경로가 지정된 JSON 값에 대한 항목을 반환하는지 확인합니다. 만약vars인수는 JSON 객체여야 하며 해당 필드는 다음으로 대체될 명명된 값을 제공합니다.스포츠 토토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 [, 침묵 부울 ]] ) → 부울

지정된 JSON 값에 대한 JSON 경로 조건자 검사 결과를 반환합니다. 결과의 첫 번째 항목만 고려됩니다. 결과가 부울이 아니면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 집합

지정된 JSON 값에 대해 JSON 경로에서 반환된 모든 JSON 항목을 반환합니다. 선택사항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

지정된 JSON 값에 대해 JSON 경로에서 반환된 모든 JSON 항목을 JSON 배열로 반환합니다. 선택사항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

지정된 JSON 값에 대해 JSON 경로에서 반환된 첫 번째 JSON 항목을 반환합니다. 보고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 ) → 텍스트

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

스포츠 토토b_pretty('["f1":1,"f2":null, 2]')

[

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

스포츠 토토_typeof ( 스포츠 토토 ) → 텍스트

스포츠 토토b_typeof ( 스포츠 토토b ) → 텍스트

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

스포츠 토토_typeof('-123.4')번호

스포츠 토토_typeof('null'::스포츠 토토)

스포츠 토토_typeof(NULL::스포츠 토토)은 NULL입니다.t


9.16.2. SQL/스포츠 토토 경로 언어

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

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

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

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

예를 들어, 분석하고 싶은 GPS 추적기의 JSON 데이터가 있다고 가정해 보세요.

"길": 
    "세그먼트": [

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

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

    ]

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

$.track.segments

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

$.track.segments[*].location

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

$.track.segments[0].location

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

$.track.segments.size()

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

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

? (조건)

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

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

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

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

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

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

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

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

9.16.2.1. 엄격하고 느슨한 모드

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

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

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

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

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

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

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

lax $.track.segments.location

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

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

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

느슨한 $.**.HR

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

엄격 $.**.HR

9.16.2.2. SQL/JSON 경로 연산자 및 메소드

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

표 9.48. 스포츠 토토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()')["숫자", "문자열", "개체"]

. 크기()번호

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

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

. 더블()번호

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

스포츠 토토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

번호 . 절대()번호

주어진 숫자의 절대값

스포츠 토토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]


참고

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

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

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

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

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

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

표 9.49. 스포츠 토토path필터 표현식 요소

술어/값

설명

== 부울

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

스포츠 토토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" 플래그 "i")')["abc", "aBdC", "abdacb"]

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

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

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

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

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

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

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

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

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

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

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

수정사항 제출

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