반응형

DB 19

[Mysql] DB Time_Zone 변경 (Docker)

time zone 이 UTC로 설정 되어 있을 경우, 현재 시간과 9시간이 차이남. 현재, DB가 docker로 설치 되어 있기 때문에 docker 쉘에 접속하여 mysql 접근 후 설정을 변경 해보겠다. 1. docker mysql 확인 docker ps 2. container 접속 docker exec -it mysql8 bash 3. mysql 접속 mysql -u root -p 4. time_zone 확인 show variables like "%time_zone"; 5. time_zone 변경 및 확인 SET GLOBAL time_zone='Asia/Seoul'; SET time_zone = 'Asia/Seoul';

DB/Mysql 2022.12.13

Split처럼 특정 구분자를 기준으로 열에서 행으로 변환 (Oracle)

오라클에서 위의 내용 처럼 한 컬럼에 특정 구분자(ex ',' , '/' 등등)로 구분하여 데이터를 관리하는 경우가 종종 있다. (개인적으론 테이블 설계가 잘못 되었다고 생각됨) 아래의 쿼리 형태로 행으로 구분해서 표현 가능 하다. SELECT T.ID ,REGEXP_SUBSTR(T.VALUE, '[^,]+', 1, Level) AS VALUE ,T.REG_DATE FROM ( SELECT 1 AS ID, '테스트1,테스트2,테스트3' AS VALUE, '2020-07-27 13:30:00' AS REG_DATE FROM DUAL UNION ALL SELECT 2 AS ID, '테스트4,테스트5' AS VALUE, '2020-07-27 14:40:00' AS REG_DATE FROM DUAL UNION ..

DB/Oracle 2020.07.27

Split처럼 특정 구분자를 기준으로 열에서 행으로 변환 (Mysql)

SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(TABLE_NAME.COLUMN, ',', NUMBERS.N), ',', -1)) AS VALUE FROM ( SELECT 1 N UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) NUMBERS INNER JOIN TABLE_NAME ON CHAR_LENGTH(TABLE_NAME.COLUMN)-CHAR_LENGTH(REPLACE(TABLE_NAME.COLUMN, ',', ''))>=NUMBERS.N-1 select 1 union all 이하 절의 union all의 수만큼 구분자를 기준으로 행으로 변환 가능 하다 예를 들어, 순서 데이터 ..

DB/Mysql 2020.07.22

CONNECT BY 뎁스구조 쿼리

트리구조, 뎁스구조에서 Full Path를 추출하는 쿼리를 오라클에서는 CONNECT BY를 사용하여 조회 할 수 있다. SELECT TC2.CD ,TC2.UP_CD ,TC2.CD_NM ,LTRIM (SYS_CONNECT_BY_PATH (TC2.CD_NM, '>'), '>') AS CD_NM_FULL FROM TB_CODE TC2 --START WITH TC2.CD = 'AB' START WITH TC2.CD IN('AA','AB','AC') CONNECT BY PRIOR TC2.CD = TC2.UP_CD 추가로, 고객사 요건으로 기존에 Full Path경로를 따로 담는 컬럼에 대해 추가 요청이 들어왔을때 기존에 등록되어 있는 데이터를 통해 Full Path값을 업데이트 해주는 쿼리는 아래와 같다. UP..

DB/Oracle 2020.02.14

CHAR vs VARCHAR (VARCHAR2)

* CHAR vs VARCHAR (VARCHAR2)의 비교 문자의 경우 CHAR와 VARCHAR의 차이는 저장 영역과 문자열의 비교 방법이다. VARCHAR 유형은 가변 길이이므로 필요한 영역은 실제 데이터 크기뿐이다. 그렇기 때문에 길이가 다양한 컬럼과, 정의된 길이와 실제 데이터 길이에 차이가 있는 컬럼에 적합하다. 저장 측면에서도 CHAR 유형보다 작은 영역에 저장할 수 있으므로 장점이 있다. 비교 방법에서도 차이가 있다. CHAR 에서는 문자열을 비교할 때 공백을 채워서 비교하는 방법을 사용한다. CHAR(8) 이고 'AA'가 저장되어 있다면, 'AA' 뒤에 공백 6자리를 붙여 8자리로 비교하는 것이다. 따라서 'AA' = 'AA ' 은 실제로 'AA ' = 'AA ' 가 되어 같다는 결과가 나온..

DB/Etc 2020.02.04

Like검색할때 Text Index 생성시 유의사항

게시글 내용검색 등 blob, clob 타입의 like검색기능을 개발할때(검색엔진을 사용하지 않은경우), Text Index를 생성하여 해당 컬럼에 인뎅싱 작업을 할 수 있다. // CTXSYS 계정 해제 ALTER USER CTXSYS ACCOUNT UNLOCK ; // 권한 부여 GRANT CTXAPP TO DQDIC ; // 인덱스 생성 (parameter 데이터 변경 시 재적용 동기화 옵션) CREATE INDEX IDX_CONTAINS_DIC_SUBJECT ON DIC_SUBJECT(CONT) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('SYNC(ON COMMIT)'); SYNC(ON COMMIT) 파라미터를 통해 데이터가 변경 될때마다 바로 적용될 수 도 있지만 아..

DB/Oracle 2020.01.29

여러 행의 데이터를 하나의 컬럼데이터로 표현(LISTAGG,XMLAGG)

1) 문자열 조합 데이터 SIZE가 4000바이트 이하 일때 SELECT mtagWord.ID ,( SELECT LISTAGG(S1.SYNONYM_WORD, ',') WITHIN GROUP (ORDER BY S1.SYNONYM_WORD) FROM DS_MTAG_SYNONYM S1 WHERE S1.MTAG_WORD_ID = mtagWord.MTAG_WORD_ID ) AS SYNONYM_WORD FROM TEST mtagWord 2) 문자열 조합 데이터 SIZE가 4000바이트 이상 일때 (XML형태로 파싱 후 재작업) SELECT mtagWord.ID ,( SELECT RTRIM(XMLAGG(XMLELEMENT(S1,S1.SYNONYM_WORD||',') ORDER BY S1.SYNONYM_WORD).EX..

DB/Oracle 2020.01.29
반응형