반응형
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
반응형
'programing' 카테고리의 다른 글
C에서 다른 과정을 어떻게 생성합니까? (0) | 2023.08.19 |
---|---|
JDBC를 사용하여 잘못된 로그인 자격 증명과 사용할 수 없는 서버를 구별하는 방법 (0) | 2023.08.19 |
bitnami mariadb의 Python 업데이트 쿼리 (0) | 2023.08.19 |
스택리스 파이썬의 단점은 무엇입니까? (0) | 2023.08.19 |
다른 Cmdlet을 호출하는 Cmdlet에서 PowerShell의 -WhatIf & -Confirm 매개 변수를 어떻게 지원합니까? (0) | 2023.08.19 |