MYSQL JSON형식 데이터 오류 해결 0 0 1,622

by 찐찐유한 [MySQL] [2023.05.22 20:47:15]


Mysql 환경에서 제가 작성한 쿼리는 아래와 같습니다.
그런데, 여기서 해당 쿼리를 그대로 실행하면 문제없이 실행되지만
이걸 WITH으로 묶어 가상테이블로 만들어 select로 호출하면 아래와 같은 오류문이 뜹니다.
Preset 환경에서 쿼리를 작성하고 차트를 만들고 있는데,
제가 작성한 아래의 쿼리를 가지고 차트를 만들려면 WIth문으로 묶여야 해서 이 문제는 반드시 해결되어야 합니다...
혹시 이유가 무엇이고 어떻게 해결하는지 도움을 받을 수 있을까요?

1. 쿼리문
SELECT
     CONCAT('b',bsod_ix) as "주문상세번호",
     CONCAT('b',bso_ix) as "주문번호",
     CASE WHEN bso_ix is not NULL THEN "직영점" END as "판매채널",
     CASE
       WHEN       
         REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(v_t.pid,',',numbers.n),',',-1),'"',''),'[',''),']',''),'*','') in
        (0000010699,0000010698,0000010697,0000010696,0000010695,0000010694,0000010693,0000010667,0000010662)
       THEN "이유식"
       ELSE "간식"
      END as "상품 카테고리",
    CASE WHEN bso_ix is not NULL THEN "단품" END as "상품 유형",
    CASE WHEN bso_ix is not NULL THEN "구매확정(직영점)" END as "주문상태",
    REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(v_t.pname,',',numbers.n),',',-1),'"',''),'[',''),']',''),'*','')
        as "상품명",
    CASE WHEN bso_ix is not NULL THEN "해당없음(직영점단품)" END as "옵션명",           
    REPLACE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(v_t.tot_price, ',', n), ',', -1),'[',''),']','') as "상품판매가격 (배송비 제외)",
    CASE WHEN bso_ix is not NULL THEN 0 END as "주문별 배송비",
    CASE WHEN bso_ix is not NULL THEN 0 END as "쿠폰 할인",
    CASE WHEN bso_ix is not NULL THEN 0 END as "적립금 사용",
    CASE WHEN bso_ix is not NULL THEN 0 END as "에치금 사용",
    CASE WHEN bso_ix is not NULL THEN 0 END as "총 할인금액",
    REPLACE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(v_t.tot_price, ',', n), ',', -1),'[',''),']','') as "실결제금액 (배송비 제외)",         
    regdate as "주문일",
    regdate as "입금일"
FROM
    (
       SELECT
           bsod_ix,
           bso_ix,
           JSON_EXTRACT(detail, '$[*].pname') as pname,
           JSON_EXTRACT(detail, '$[*].pid') as pid,
           JSON_EXTRACT(detail, '$[*].sig_price') as single_price,
           JSON_EXTRACT(detail, '$[*].count') as cnt,
           JSON_EXTRACT(detail, '$[*].total_cost') as tot_price,
           total_cost,
           regdate
        FROM branch_sale_order_detail
        WHERE total_cost <> 0) as v_t
CROSS JOIN
    ( SELECT 1 as n UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION
      SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) as numbers
WHERE CHAR_LENGTH(v_t.pname) - CHAR_LENGTH(REPLACE(v_t.pname, ',', '')) >= numbers.n-1

2. 오류문
Error: (3141, 'Invalid JSON text in argument 1 to function json_extract: "Missing a comma or \'}\' after an object member." at position 25.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입