본문으로 건너뛰기
최종 수정: 에

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을 반환합니다.

예제​

  1. 단일 값 검색(one)

    SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'John');
    +-----------------------------------------------------------+
    | JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'John') |
    +-----------------------------------------------------------+
    | "$.name" |
    +-----------------------------------------------------------+

  2. 단일 값 검색(one), 일치하는 값이 여러 개여도 경로 하나만 반환

    SELECT JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'one', 'John');
    +----------------------------------------------------------------------------+
    | JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'one', 'John') |
    +----------------------------------------------------------------------------+
    | "$.name" |
    +----------------------------------------------------------------------------+
  3. 일치하는 모든 값 검색(all)

    SELECT JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'all', 'John');
    +----------------------------------------------------------------------------+
    | JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'all', 'John') |
    +----------------------------------------------------------------------------+
    | ["$.alias","$.name"] |
    +----------------------------------------------------------------------------+
  4. 와일드카드로 '%' 사용

    SELECT JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'all', '%');
    +-------------------------------------------------------------------------+
    | JSON_SEARCH('{"name": "John", "age": 30, "alias": "John"}', 'all', '%') |
    +-------------------------------------------------------------------------+
    | ["$.alias","$.name"] |
    +-------------------------------------------------------------------------+
  5. 와일드카드로 '_' 사용

    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"] |
    +----------------------------------------------------------------------------+
  6. 와일드카드 이스케이프

    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"에는 일치하지 않습니다.

  7. 일치하는 값을 찾지 못한 경우

    SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'Alice');
    +------------------------------------------------------------+
    | JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'Alice') |
    +------------------------------------------------------------+
    | NULL |
    +------------------------------------------------------------+
  8. 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 |
    +-----------------------------------+
  9. 유효하지 않은 <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'