MySQL 5.7의 새로운 JSON 함수를 좋아하지만 JSON의 값을 일반 테이블 구조로 병합하려고하는 블록으로 실행 중입니다.MySQL의 JSON 배열을 행으로 변환합니다.
JSON을 잡아서 배열을 조작하고 추출하는 작업은 간단합니다. 줄곧 JSON_EXTRACT. 하지만 JSON 배열에서 행으로가는 반대의 경우는 어떻습니까? 아마도 기존의 MySQL JSON 기능에 밀집되어 있을지 모르지만 그 중 하나를 찾아 낼 수는 없었습니다.
예를 들어, JSON 배열이 있고 값이있는 배열의 각 요소에 행을 삽입하고 싶다고합시다. 내가 찾은 유일한 방법은 여러 개의 JSON_EXTRACT (... '$ [0]') JSON_EXTRACT (... '$ [1]') 등을 작성하고 함께 결합하는 것입니다.
또는 JSON 배열이 있고이를 쉼표로 구분 된 단일 문자열로 GROUP_CONCAT()할까요?
SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(JSON_EXTRACT(@j, CONCAT('$[', x.n, ']'))) AS val
FROM
(
SELECT 0 AS n
UNION
SELECT 1 AS n
UNION
SELECT 2 AS n
UNION
SELECT 3 AS n
UNION
SELECT 4 AS n
UNION
SELECT 5 AS n
) x
WHERE x.n < JSON_LENGTH(@j);
을하지만 내 눈 아파 : 즉
, 나는이 작업을 수행 할 수 있습니다 알고 있습니다. 그리고 내 마음.어떻게 같은 것을 수행 할 수 있습니다
SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(JSON_EXTRACT(@j, '$[ * ]'))
을 ... 그리고는 JSON 배열 자체에 대 배열에 함께 값을 연결 있나요?
나는 내가 여기 찾고 있어요 것은의 라인을 따라 JSON_SPLIT 어떤 종류의 추측 : MySQL은 적절한 STRING_SPLIT (발, '분리') 테이블 반환 함수가 있다면
SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(val)
FROM
JSON_SPLIT(JSON_EXTRACT(@j, '$[ * ]'), '$')
것은, 내가 해킹 수 그것 (저주받을 수 있음)을 피할 수는 있지만, 그것은 사용할 수 없습니다.
나는 당신이 할 수 있다고 생각하지 않습니다. SPLIT_STRING()': 질의는 조인없이 동일한 행의 입력 테이블에서 여러 행을 작성할 수 없습니다. – Barmar
네, 맞을지도 모릅니다. 나는 테이블 값을 가진 함수가 지원되었다고 생각 했었습니다. 왜냐하면 태양 아래서 다른 DBMS가 있기 때문입니다. 분명히 MySQL은 이상한 사람입니다. 예를 들어, SQL Server는 STRING_SPLIT : https://msdn.microsoft.com/en-us/library/mt684588.aspx를 완벽하게 준수합니다. 심지어 postgegress는 regexp_split_to_table에서 정규식으로 분할됩니다. 아, MySQL ... –
오른쪽. MySQL은 테이블이 아닌 배열과 같은 데이터 구조를 가지고 있지 않다. JSON 함수는 스키마를 비정규 화하기위한 포괄적 인 라이센스로 간주되어서는 안됩니다. – Barmar