programing

MariaDb를 사용하여 json(긴 텍스트) 열을 쿼리하여 키 아래에 지정된 값이 있는지 확인하려면 어떻게 해야 합니까?

muds 2023. 8. 19. 10:54
반응형

MariaDb를 사용하여 json(긴 텍스트) 열을 쿼리하여 키 아래에 지정된 값이 있는지 확인하려면 어떻게 해야 합니까?

이 json 데이터는 '이름' 열에 있으며, 일부 레코드의 이름은 다중 언어 지원으로 저장됩니다.

{"en":"Professional Association","de":"Berufsverband","uk":null}

이 쿼리를 실행하면 0개의 레코드가 반환됩니다.

select * from `some_table` where lower(json_value(name,'$.*')) like lower('%Berufsverband%');

그러나 언어 키(de)를 지정하는 쿼리를 실행하면 작동합니다.

select * from `some_table` where lower(json_value(name,'$.de')) like lower('%Berufsverband%');

제 질문은, 어떻게 하면 적절하게 사용할 수 있을까 하는 것입니다.$.*마리아DB의 와일드카드?

MySQL에서 동일한 쿼리를 실행하면 정상적으로 작동합니다.

select * from `some_table` where lower(json_unquote(name->'$.*')) like lower('%Berufsverband%');

JSON_Contains와 JSON_EXTRACT의 조합을 사용할 수 있습니다.내에서 와일드카드를 사용할 수 없습니다.JSON_CONTAINS하지만 당신은 안에서 할 수 있습니다.JSON_EXTRACT따라서 와일드카드를 사용하여 추출물로 내용물을 감쌀 경우(아래 JSONPath Expression의 Object Member Selector 참조) 검색 중인 값이 포함된 행을 반환합니다.

개체 구성원 선택기

JSON 개체에서 구성원을 선택하려면 다음 중 하나를 사용할 수 있습니다.

  • .memberName은 이름 memberName을 가진 멤버의 값을 선택합니다.
  • ".memberName" - 위와 동일하지만 유효한 식별자(즉, 공백, 점 및/또는 기타 문자)가 아닌 이름을 가진 구성원을 선택할 수 있습니다.
  • - 개체의 모든 멤버 값을 선택합니다.
select * from `some_table` 
WHERE JSON_CONTAINS(JSON_EXTRACT(name, "$.*"), '"Berufsverband"')

db<>여기를 클릭합니다.

json_value를 json_query로 바꿨습니다.결과는 다음과 같습니다.

select * from `some_table` where lower(json_query (name, '$')) like lower('%Berufsverband%');

이제 예상대로 작동합니다.

언급URL : https://stackoverflow.com/questions/73613883/using-mariadb-how-can-i-query-a-jsonlongtext-column-to-check-if-a-given-value

반응형