select aa.*, a.*
from tb_pay a,
JSON_TABLE(cancels, '$[*]' COLUMNS (
`transactionKey` VARCHAR(255) PATH '$.transactionKey',
`cancelReason` VARCHAR(255) PATH '$.cancelReason',
`canceledAt` DATE PATH '$.canceledAt',
`cancelAmount` INT PATH '$.cancelAmount'
)
) as aa
where aa.canceledAt = '2023-09-05'
다음과 같이 오류 나는 경우 레코드 중 JSON 포멧이 안닌 경우 가 있을 수 있음
SQL Error [4038][HY000]: (conn=97662) Syntax error in JSON text in argument 1 to function 'JSON_TABLE' at position 3
다름과 같이 null 값 필터링 후 적용하면 됨.
select aa.*
from (
select cancels
from tb_pay
where cancels is not null) a,
JSON_TABLE(cancels, '$[*]' COLUMNS (
`transactionKey` VARCHAR(255) PATH '$.transactionKey',
`cancelReason` VARCHAR(255) PATH '$.cancelReason',
`canceledAt` DATE PATH '$.canceledAt',
`cancelAmount` INT PATH '$.cancelAmount'
)
) as aa
where 1 = 1
and aa.canceledAt = '2023-09-05'