sourcecode

mariadb 또는 mysql에서 json 배열 내의 요소를 찾고 삭제하는 방법

copyscript 2023. 8. 7. 22:52
반응형

mariadb 또는 mysql에서 json 배열 내의 요소를 찾고 삭제하는 방법

저는 mariadb 테이블의 '데이터' 필드에 이 json이 있고 저는 다음이 필요합니다.

  1. 예: TN-17170 ": {" id_fact ":" 6 "} 내에 값이 있는지 확인합니다.SELECT JSON_EXTRACT(data, '$**.TN-17170.id_fact') as exist from fact WHERE id ='6'하지만 이것은 ['6']과 같은 것을 보여줍니다. 저는 그냥 '6'을 받고 싶습니다.
  2. 다른 문장에서는 값이 존재하면 삭제합니다.로 시도합니다.UPDATE `fact` set datos= JSON_REMOVE(data, '$.datos.TN-17170') WHERE id ='6',하지만 그럴 수 없습니다.

mariadb에서 json을 사용하는 것에 대한 실용적인 문서가 많지 않고 이러한 기능들을 사용하고 싶습니다.

CREATE TABLE `fact` (
  `id` int(20) NOT NULL,
  `data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci;

INSERT INTO `fact` (`id`, `data`) VALUES
(6, '{\"id\": \"23\", \"datos\": [{\"TN-17170\": {\"id_fact\": \"6\"}}, {\"TN-17171\": {\"id_fact\": \"6\"}}, {\"TN-17173\": {\"id_fact\": \"6\"}}, {\"TN-17127\": {\"id_fact\": \"6\"}}, {\"TN-17177\": {\"id_fact\": \"6\"}}, {\"TN-17397\": {\"id_fact\": \"6\"}}]}');

SELECT JSON_EXTRACT(data, '$**.TN-17170.id_fact') as exist from fact WHERE id ='6' ;

SELECT * FROM fact ;

UPDATE `fact` set data= JSON_REMOVE(data, '$.datos.TN-17170') WHERE id ='6';
SELECT * FROM fact ;

db 예제

다음 패턴에 대한 대괄호( 경우 0) 내의 인덱스를 지정해야 합니다.JSON_EXTRACT()배열의 내용을 추출하기 위한 함수:

SELECT JSON_EXTRACT(data, '$.datos[0].TN-17170.id_fact') AS exist 
  FROM `fact` 
 WHERE id ='6';

그리고 이것은 또한 사용될 수 있습니다.JSON_REMOVE()함수:

UPDATE `fact` 
   SET data= JSON_REMOVE(data, '$.datos[0].TN-17170.id_fact') 
 WHERE id ='6';

Demo

언급URL : https://stackoverflow.com/questions/63929116/how-to-find-and-delete-elements-within-a-json-array-in-mariadb-or-mysql

반응형