MySQL 버전 8.0.19에서 문자 index (), string_split () [duplicate]와 같은 일부 이전 함수를 사용할 수 없으므로 문자열을 열로 분할하는 방법

Dec 29 2020

예를 들어 열 이름은 제품 항목에 대해 01,04,07을 표시하는 행이있는 코드와 같이 열로 분할하려는 행이 하나 있습니다.

제품 항목을 열로 나누고 싶습니다. 이전 기능을 시도했지만 내가 작업중인 SQL 버전에는 string_split 및 문자 인덱스와 같은 옵션이 없다는 것을 깨달았 기 때문에 모든 제안이 도움이 될 것입니다. 내가 사용 instr()하고 substring()있지만, 구매자는 위의 그림보다 더 많거나 적은 아이템을 구입할 수 있습니다.

답변

1 GMB Dec 29 2020 at 05:15

당면한 문제는 디자인입니다. 문자열 열에 여러 정수 값을 저장하면 안됩니다. 각 튜플 값은 별도의 행에 저장되어야합니다.

귀하의 질문에 관해서는 : 최신 MySQL 버전에서 옵션은 JSON입니다. 값을 열이 아닌 행에 넣는 것이 더 편리 할 수 ​​있습니다. 한 가지 방법은 다음과 같습니다.

select t.*, x.*
from mytable t
cross join lateral json_table(
    concat('[', t.code, ']'),
    '$[*]' columns (rn for ordinality, code_part int path '$')
) x

결과를 열로 원하는 경우 한 가지 옵션은 조건부 집계입니다. 필요한만큼 열을 열거해야합니다.

select t.*,
    max(case when x.rn = 1 then x.code_part end) as code_part_1,
    max(case when x.rn = 2 then x.code_part end) as code_part_2,
    ...
from mytable t
cross join lateral json_table(
    concat('[', t.code, ']'),
    '$[*]' columns (rn for ordinality, code_part int path '$')
) x
group by t.id  -- assuming that "id" is the primary key of "mytable"