최종 수정: 에
JSON_SEARCH
설명
JSON_SEARCH 함수는 JSON 문서에서 지정한 값을 검색하는 데 사용됩니다. 값을 찾으면 해당 값의 경로를 반환합니다. 값을 찾지 못하면 NULL을 반환합니다. 이 함수는 JSON 데이터 구조 내에서 재귀적으로 검색할 수 있습니다.
구문
JSON_SEARCH( <json_object>, <one_or_all>, <search_value> )
매개변수
<json_object>: JSON 타입으로, 검색할 JSON 문서입니다.<one_or_all>: String 타입으로, 일치하는 모든 값을 찾을지 지정합니다. 'one' 또는 'all'을 사용할 수 있습니다.<search_value>: String 타입으로, 검색 대상 값입니다. 와일드카드로 '%' (임의의 길이의 문자열과 일치)와 '_' (임의의 단일 문자와 일치)를 지원합니다.
반환 값
Nullable(JSON): <one_or_all> 매개변수에 따라 다음 두 가지 경우로 나뉩니다:
1. 'one': If a matching value is found, returns a JSON path pointing to the matching value. If no matching value is found, returns NULL.
2. 'all': Returns paths to all matching values. If there are multiple values, returns them as a JSON array. If no matches are found, returns NULL.
참고 사항
one_or_all매개변수는 일치하는 모든 값을 찾을지 결정합니다. 'one'은 처음 일치하는 경로를 반환하고, 'all'은 일치하는 모든 경로를 반환합니다. 다른 값을 지정하면 오류가 발생합니다.- 일치하는 값을 찾지 못하면 함수는 NULL을 반환합니다.
<json_object>,<one_or_all>,<search_value>중 하나라도 NULL이면 NULL을 반환합니다.
예제
-
단일 값 검색(one)
SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'John');+-----------------------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'John') |
+-----------------------------------------------------------+
| "$.name" |
+-----------------------------------------------------------+ -
단일 값 검색(one), 일치하는 값이 여러 개여도 경로 하나만 반환
SELECT JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'one', 'John');+----------------------------------------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'one', 'John') |
+----------------------------------------------------------------------------+
| "$.name" |
+----------------------------------------------------------------------------+ -
일치하는 모든 값 검색(all)
SELECT JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'all', 'John');+----------------------------------------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'all', 'John') |
+----------------------------------------------------------------------------+
| ["$.alias","$.name"] |
+----------------------------------------------------------------------------+ -
와일드카드로 '%' 사용
SELECT JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'all', '%');+-------------------------------------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'all', '%') |
+-------------------------------------------------------------------------+
| ["$.alias","$.name"] |
+-------------------------------------------------------------------------+ -
와일드카드로 '_' 사용
SELECT JSON_SEARCH('{"name": "John", "age": 30, "alias": "Jihn"}', 'all', 'J_hn');+----------------------------------------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30, "alias": "Jihn"}', 'all', 'J_hn') |
+----------------------------------------------------------------------------+
| ["$.alias","$.name"] |
+----------------------------------------------------------------------------+ -
와일드카드 이스케이프
SELECT JSON_SEARCH('{"name": "John", "age": 30, "alias": "J_hn"}', 'all', 'J\_hn');+-----------------------------------------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30, "alias": "J_hn"}', 'all', 'J\_hn') |
+-----------------------------------------------------------------------------+
| "$.alias" |
+-----------------------------------------------------------------------------+'J_hn'은 "J_hn"에만 일치하며 "John"에는 일치하지 않습니다.
-
일치하는 값을 찾지 못한 경우
SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'Alice');+------------------------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'Alice') |
+------------------------------------------------------------+
| NULL |
+------------------------------------------------------------+ -
NULL 매개변수
SELECT JSON_SEARCH('{"name": "John", "age": 30}', NULL, 'Alice');+-----------------------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30}', NULL, 'Alice') |
+-----------------------------------------------------------+
| NULL |
+-----------------------------------------------------------+SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', NULL);+---------------------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30}', 'one', NULL) |
+---------------------------------------------------------+
| NULL |
+---------------------------------------------------------+SELECT JSON_SEARCH(NULL, 'one', 'Alice');+-----------------------------------+
| JSON_SEARCH(NULL, 'one', 'Alice') |
+-----------------------------------+
| NULL |
+-----------------------------------+ -
유효하지 않은
<one_or_all>매개변수SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'three', 'Alice');ERROR 1105 (HY000): errCode = 2, detailMessage = [INVALID_ARGUMENT]the one_or_all argument three is not 'one' not 'all'