JSON_UNQUOTE(JSON_EXTRACT(col->"$.path")) 와 동일
JSON_UNQUOTE(JSON_EXTRACT())를 사용할 수 있는 모든 곳에서 사용 가능
세부 정보
SELECT * FROM t1;
/*
+--------------------------------------+
| jdoc |
+--------------------------------------+
| {"key1": "value1", "key2": "value2"} |
+--------------------------------------+
*/
SELECT JSON_UNQUOTE(JSON_EXTRACT(jdoc, '$.key1')) FROM t1;
/*
+--------------------------------------------+
| JSON_UNQUOTE(JSON_EXTRACT(jdoc, '$.key1')) |
+--------------------------------------------+
| value1 |
+--------------------------------------------+
*/
SELECT jdoc -> '$.key1' FROM t1;
/*
+------------------+
| jdoc -> '$.key1' |
+------------------+
| "value1" |
+------------------+
*/
SELECT jdoc ->> '$.key1' FROM t1;
/*
+-------------------+
| jdoc ->> '$.key1' |
+-------------------+
| value1 |
+-------------------+
*/
2. JSON 집계 함수 JSON_ARRAYAGG(), JSON_OBJECTAGG() 추가
JSON_ARRAYAGG() : 컬럼 또는 표현식을 인수로 사용하고 결과를 단일 JSON 배열로 집계
JSON_OBJECTAGG() : 키와 값으로 해석되는 두 개의 컬럼 또는 표현식을 사용하여 결과를 단일 JSON 객체로 반환
세부 정보
SELECT * FROM t1;
/*
+------+--------+
| a | b |
+------+--------+
| key1 | value1 |
| key2 | value2 |
| key3 | value3 |
+------+--------+
*/
SELECT JSON_ARRAYAGG(a), JSON_OBJECTAGG(a, b) FROM t1;
/*
+--------------------------+--------------------------------------------------------+
| JSON_ARRAYAGG(a) | JSON_OBJECTAGG(a, b) |
+--------------------------+--------------------------------------------------------+
| ["key1", "key2", "key3"] | {"key1": "value1", "key2": "value2", "key3": "value3"} |
+--------------------------+--------------------------------------------------------+
*/
3. 기존 JSON 값을 읽기 쉬운 형식으로 출력하는 JSON_PRETTY() 함수 추가
4. JSON 컬럼 값의 부분 업데이트에 대한 지원 추가
JSON_SET(), JSON_REPLACE(), JSON_REMOVE()
5. JSON_STORAGE_SIZE(), JSON_STORAGE_FREE() 함수 추가
JSON_STORAGE_SIZE() : 부분 업데이트 전에 JSON 도큐먼트의 바이너리 표현에 사용되는 저장 공간을 바이트 단위로 반환
JSON_STORAGE_FREE() : JSON_SET() 또는 JSON_REPLACE()를 사용하여 부분적으로 업데이트된 후 JSON 유형의 테이블 컬럼에 남아 있는 공간의 크기를 제공
세부 정보
SELECT * FROM t1;
/*
+--------------------------------------------------------+
| jdoc |
+--------------------------------------------------------+
| {"key1": "value1", "key2": "value2", "key3": "value3"} |
+--------------------------------------------------------+
*/
SELECT JSON_STORAGE_SIZE(jdoc) FROM t1;
/*
+-------------------------+
| JSON_STORAGE_SIZE(jdoc) |
+-------------------------+
| 59 |
+-------------------------+
*/
SELECT JSON_STORAGE_FREE(jdoc) from t1;
/*
+-------------------------+
| JSON_STORAGE_FREE(jdoc) |
+-------------------------+
| 0 |
+-------------------------+
*/
UPDATE t1 SET jdoc = JSON_SET(jdoc, '$.key3', 'val3');
SELECT * FROM t1;
/*
+------------------------------------------------------+
| jdoc |
+------------------------------------------------------+
| {"key1": "value1", "key2": "value2", "key3": "val3"} |
+------------------------------------------------------+
*/
SELECT JSON_STORAGE_FREE(jdoc) from t1;
/*
+-------------------------+
| JSON_STORAGE_FREE(jdoc) |
+-------------------------+
| 2 |
+-------------------------+
*/
6. XPath 표현식에서 $[1 ~ 5]와 같은 범위에 대한 지원이 DBMS에 추가
$[last]가 항상 배열의 마지막(가장 높은 번호) 요소를 선택하고 $[last-1]이 마지막 요소 이전을 선택하도록 last 키워드 및 상대 주소 지정에 대한 지원 추가
세부 정보
SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-3 to last-1]');
/*
+--------------------------------------------------------+
| JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-3 to last-1]') |
+--------------------------------------------------------+
| [2, 3, 4] |
+--------------------------------------------------------+
*/
7. RFC 7396을 준수하도록 JSON 병합 함수 JSON_MERGE_PATCH() 추가
2개의 JSON 객체를 아래 조건으로 단일 JSON 객체로 병합
두 번째 객체에 동일한 키를 가진 멤버가 없는 첫 번째 객체의 각 멤버
첫 번째 객체에 동일한 키를 가진 멤버가 없고 값이 JSON null 리터럴이 아닌 두 번째 객체의 각 멤버
두 객체에 모두 존재하는 키가 있고 두 번째 객체의 값이 JSON null 리터럴이 아닌 각 멤버
JSON_MERGE() => JSON_MERGE_PRESERVE() 함수명 변경
세부 정보
SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2, "e": null}', '{ "a": 3, "c":4, "d": null}');
/*
+--------------------------------------------------------------------------------+
| JSON_MERGE_PATCH('{ "a": 1, "b":2, "e": null}', '{ "a": 3, "c":4, "d": null}') |
+--------------------------------------------------------------------------------+
| {"a": 3, "b": 2, "c": 4, "e": null} |
+--------------------------------------------------------------------------------+
*/
8. 중복 키의 "last duplicate key wins" 정규화를 구현
세부 정보
CREATE TABLE t2 (c1 JSON);
INSERT INTO t2 VALUES ('{"x": 17, "y": -20, "x": "red", "x": [3, 5, 7]}');
SELECT c1 FROM t2;
/*
+----------------------------+
| c1 |
+----------------------------+
| {"x": [3, 5, 7], "y": -20} |
+----------------------------+
*/
9. JSON_TABLE() 함수 추가
JSON 데이터를 받아 지정된 컬럼이 있는 관계형 테이블로 반환
JSON_TABLE(expr, path COLUMNS column_list) [AS] alias)
세부 정보
SELECT * FROM
JSON_TABLE(
'[{"a":3,"b":"0"},{"a":"3","b":"1"},{"a":2,"b":1},{"a":0},{"b":[1,2]}]', "$[*]"
COLUMNS(
rowid FOR ORDINALITY,
xa INT EXISTS PATH "$.a",
xb INT EXISTS PATH "$.b",
sa VARCHAR(100) PATH "$.a",
sb VARCHAR(100) PATH "$.b",
ja JSON PATH "$.a",
jb JSON PATH "$.b"
)
) AS jt1;
/*
+-------+------+------+------+------+------+--------+
| rowid | xa | xb | sa | sb | ja | jb |
+-------+------+------+------+------+------+--------+
| 1 | 1 | 1 | 3 | 0 | 3 | "0" |
| 2 | 1 | 1 | 3 | 1 | "3" | "1" |
| 3 | 1 | 1 | 2 | 1 | 2 | 1 |
| 4 | 1 | 0 | 0 | NULL | 0 | NULL |
| 5 | 0 | 1 | NULL | NULL | NULL | [1, 2] |
+-------+------+------+------+------+------+--------+
*/
Last updated