블로그는 나의 힘!
[ Programing ]/Database2023. 11. 16. 16:12

/* VIEW : 가상 테이블 (데이터 딕셔너리 테이블에 SQL문만 저장되 디스크 공간 할당 없음.) */

-- 기존 뷰-테이블 삭제, 만약 없다면 생성.
DROP VIEW IF EXISTS `v_object_info`;
CREATE TABLE `v_object_info` (
     `object_id` INT(11) NOT NULL COMMENT ' ObjectSequence', 
     `object_name` VARCHAR(128) NOT NULL COLLATE 'utf8mb4_general_ci', 
     `param` BIGINT(20) NOT NULL DEFAULT '0', 
     `reg_date` DATETIME NOT NULL 
) ENGINE = MyISAM;

-- 뷰-테이블 삭제
DROP VIEW IF EXISTS `v_object_info`;
DROP TABLE IF EXISTS `v_object_info`;
-- 뷰 알고리즘(Query) 생성
CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `v_object_info` AS SELECT `object_id`, `object_name`, `param`, `reg_date` FROM v_object_info;


 

Posted by Mister_Q
[ Programing ]/Database2023. 11. 16. 12:32

# 생성
CREATE TABLE objectInfo ( 
     objectID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
     param VARCHAR(128),    
     param2 JSON
);



# 저장
INSERT INTO objectInfo
SET param = '{"keep":23,"storage":"1"}', param2 = '{"keep":23,"storage":"1"}';

  ( OR )
INSERT INTO objectInfo
SET param = '{"keep":23,"storage":"1"}', param2 = JSON_OBJECT("keep", 23, "storage", "1");




TABLE : objectInfo

objectID param param2
1 {"storage":"1"} {"storage":"1"}
2 {"keep":23,"storage":"1"} {"keep":23,"storage":"1"}




# 검색
SELECT objectID, param FROM objectInfo;

objectID param param2
1 {"storage":"1"} {"storage":"1"}
2 {"keep":23,"storage":"1"} {"keep":23,"storage":"1"}



/*
  화살표(->)로 필드와 경로식을 구분. 

  param 컬럼에 있는 JSON 데이터에서 key 이름이 keep, storage 요소를 가리킨다.
  param->'$.keep' 문은 json_extract(param, '$.keep') 과 동일.
*/

SELECT objectID,
         param->'$.keep' AS keep,

         param->'$.storage' AS storage ,
         CAST(param->'$.storage' AS SIGNED) AS castIntStorage 
FROM objectInfo;

objectID keep storage castIntStorage
1 (NULL) 1 1
2 23 1 1




# 수정
UPDATE는 JSON_SET(), JSON_REPLACE(), JSON_REMOVE() 함수 이용.

     JSON_SET(): 기존 값 수정하고 미존재 시 추가.
     JSON_REPLACE(): 기존 값 변경.
     JSON_REMOVE(): 기존 값 삭제. -> NULL.

문법 :

UPDATE table_name 
SET json_col = JSON_SET(json_col, '$.valueName1', UPPER(json_col->>'$.valueName1')),

      json_col = JSON_REPLACE(json_col, '$.valueName2', int_col),
      json_col = JSON_REMOVE(json_col, '$.valueName3'),
      int_col = int_col + 1;

UPDATE table_name
SET json_col = JSON_REPLACE(
                                    JSON_REMOVE(json_col, '$.valueName3'),

                                    '$.valueName1', UPPER(json_col->>'$.valueName1'),
                                    '$.valueName2', int_col), 
       int_col = int_col + 1;




UPDATE objectInfo
SET param2 = JSON_SET(info, "$.keep", 46) WHERE objectID = 1;


SELECT * from objectInfo where objectID = 1;

objectID param param2
1 {"keep":23,"storage":"1"} {"keep":46,"storage":"1"}




# JSON 함수
JSON_ARRAY : JSON 배열 반환.

  SELECT JSON_ARRAY("apple", "car", "tv", "ios");

JSON_ARRAY("apple", "car", "tv", "ios")
["apple", "car", "tv", "ios"]




JSON_EXTRACT : JSON 경로와 일치하는 데이터 반환.

  SET @j = '[10, 20, [30, 40]]';

  SELECT JSON_EXTRACT(@j, '$[0]');

JSON_EXTRACT(@j, '$[0]')
10



# Array Select

DB 테이블 JSON 컬럼 : 
json_info
{"info_list":[{"type":1,"time":1652961788},{"type":2,"time":1652961371},{"type":3,"time":1652961356}]}

SELECT JSON_EXTRACT(payment_list, '$.info_list[0].time');
>> 1652961788



# Data Select

DB 테이블 JSON 컬럼 : 
json_info
{"category":2, "product_id":0,"quantity":50000}

SELECT JSON_EXTRACT( json_info, '$.category')
     ,JSON_EXTRACT( json_info, '$.product_id')
     ,JSON_EXTRACT( json_info, '$.quantity');
>> 2     0     50000




JSON_LENGTH : 크기.

DB 테이블 JSON 컬럼 : 
json_info
{"info_list":[{"type":1,"time":1652961788},{"type":2,"time":1652961371},{"type":3,"time":1652961356}]}

# Array Size
SELECT JSON_LENGTH(json_info, '$.info_list');
>> 3
# Json Data Size
SELECT JSON_LENGTH(json_info);
>> 1




JSON_OBJECT : SELECT 결과를 JSON 형태로 변환해서 받아보고 싶을 때 사용.

  SELECT JSON_OBJECT("name","yundream", "age", 25, "address", "seoul");

JSON_OBJECT("name","yundream", "age", 25, "address", "seoul")
{"age": 25, "name": "yundream", "address": "seoul"}




JSON_SET : JSON 문서에 필드를 추가나 갱신 위해서 사용.

  SET @j = JSON_OBJECT("a", 1, "b", JSON_ARRAY(2,3));

  SELECT @j;

@j
{"a": 1, "b": [2, 3]}


  SELECT JSON_SET(@j, '$.a', 10, '$.c', '[true, false]');

JSON_SET(@j, '$.a', 10, '$.c', '[true, false]')
{"a": 10, "b": [2, 3], "c": "[true, false]"}




JSON_INSERT : 새로운 필드만 추가.

  SELECT @j;

@j
{"a": 1, "b": [2, 3]}


  SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[treu, false]');

JSON_INSERT(@j, '$.a', 10, '$.c', '[treu, false]')
{"a": 1, "b": [2, 3], "c": "[treu, false]"}




JSON_REPLACE : 같은 필드 존재할 경우 변경. 존재하지 않는 필드는 무시.

  SELECT @j;

@j
{"a": 1, "b": [2, 3]}


  SELECT JSON_REPLACE(@j, '$.a', 10, '$.c', '[treu, false]');

JSON_REPLACE(@j, '$.a', 10, '$.c', '[treu, false]')
{"a": 10, "b": [2, 3]}




JSON_VALID : JSON 문서 형식이 올바른지 검사.

  SELECT JSON_VALID('{"a": 1}');

JSON_VALID('{"a": 1}')
1


  SELECT JSON_VALID('hello');

JSON_VALID('hello')
0




JSON_STORAGE_SIZE & JSON_STORAGE_FREE : JSON 문서 저장하는데 사용된 바이트 수 반환.

  SELECT JSON_STORAGE_SIZE(param2) AS JsonSize FROM objectInfo;






출처 :
Mysql JSON - SELECT, INSERT, UPDATE, 색인 (joinc.co.kr)


 

Mysql JSON - SELECT, INSERT, UPDATE, 색인

MySQL도 JSON을 지원합니다. SELECT, INSERT, 색인하는 법, JSON PATH 표현식을 살펴봅니다. 그리고 JSON_ARRAY, JSON_EXTRACT, JSON_OBJECT, JSON_SET, JSON_INSERT, JSON_REPLACE, JSON_VALID 등의 주요 함수 사용법도 확인합니다.

www.joinc.co.kr

[DB] MYSQL - JSON 이란? : 네이버 블로그 (naver.com)

 
 

 

[DB] MYSQL - JSON 이란?

JSON(JavaScript Object Notation) - Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한...

blog.naver.com

 

Posted by Mister_Q
[ Programing ]/C++2023. 10. 17. 12:05


     time_t tTargetTime = time(NULL);     //!< 현재 시간.
     int32 nIntervalMonth = 0;     //!< 이전 설정 달 (기간).

     struct tm tmNow;
     localtime_s(&tmNow, &tTargetTime);
     if (before_interval_month != 0)
     {
          //!< 12월 변환 후 계산.
          int32 nConvertMonth = tmNow.tm_mon + 1;

          //!< 이전 설정 달이 1년 전이라면 날짜 계산.
          if (nConvertMonth - nIntervalMonth <= 0)
          {
               int32 nRemainMonth = nIntervalMonth - nConvertMonth;
               tmNow.tm_year -= 1;     //!< 1년 전으로 설정
               nRemainMonth = 12 - nRemainMonth;     //!< 설정 달로 설정
               tmNow.tm_mon = nRemainMonth - 1;
          }
          else
          {
               //!< 설정 달로 변경
               tmNow.tm_mon -= nIntervalMonth;
          }
     }
     int nReturnTime = ((tmNow.tm_year + 1900) * 100) + ( tmNow .tm_mon + 1);

 

'[ Programing ] > C++' 카테고리의 다른 글

[C++] 매크로 - #, ## 연산자  (0) 2024.08.22
C++ 콘솔 창.  (0) 2022.04.07
C++ MiniDump Review  (0) 2022.01.21
Memory Access Violation - 메모리 접근 위반.  (0) 2022.01.19
C++ malloc, new 메모리 할당의 차이점.  (0) 2021.11.25
Posted by Mister_Q