source

JSON 배열에 대한 JSON 함수를 사용하여 레코드 필터링

factcode 2022. 12. 25. 09:41
반응형

JSON 배열에 대한 JSON 함수를 사용하여 레코드 필터링

데이터가 JSON 형식으로 저장된 테이블이 하나 있습니다.견적이 필요한 레코드가 몇 개 있는지 확인해야 합니다.

JSON

[{"id":14,"desc":"Job is incomplete.","quote_required":"Yes"}, 
 {"id":14,"desc":"appointment need to rebook","quote_required":"Yes","start-date":"2021-11-20"}]

아래를 사용하는 것에 대해 달성하려고 합니다.JSON_CONTAINS()그리고.JSON_EXTRACT()

SELECT COUNT(*)   
  FROM `products`   
 WHERE JSON_CONTAINS( JSON_EXTRACT(submit_report, "$.quote_required"), '"Yes"' )

하지만 나는 여기서 0개의 결과를 얻고 있다.

어레이의 각 요소를 검색할 수 있습니다.quote_required와 동등하다Yes다음과 같은 반복적인 공통 테이블 표현으로 인덱스 값을 생성함으로써 배열의 0에서 1을 뺀 길이까지 인덱스 값을 사용합니다.

WITH recursive cte AS 
(
  SELECT 0 AS n
  UNION ALL
  SELECT n + 1 AS value
    FROM cte
   WHERE cte.n < ( SELECT JSON_LENGTH(submit_report) - 1 FROM `products` ) 
)
SELECT SUM(JSON_CONTAINS(JSON_EXTRACT(submit_report, CONCAT("$[",n,"].quote_required")),
                                      '"Yes"')) AS count
  FROM cte
  JOIN `products`

Demo

언급URL : https://stackoverflow.com/questions/65668504/filter-records-using-json-function-for-json-array

반응형