일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Stock ipo
- 자바
- MYSQL
- JavaScript
- 공모주 청약
- 주식 청약
- 6월 공모주 청약 일정
- SQL
- html
- php
- java
- 맥
- 공모주 청약 일정
- 리눅스
- Eclipse
- Oracle
- linux
- IPO
- codeigniter
- 제이쿼리
- jquery
- 주식
- css
- 코드이그나이터
- 오라클
- 자바스크립트
- 주식 청약 일정
- 7월 공모주 청약 일정
- 공모주
- Stock
- Today
- Total
개발자의 끄적끄적
[Tibero] AGGR_CONCAT, REPLACE, CHR 함수를 이용한 쿼리 만들기[펌] 본문
[Tibero] AGGR_CONCAT, REPLACE, CHR 함수를 이용한 쿼리 만들기[펌]
AGGR_CONCAT, REPLACE, CHR 함수를 이용한 쿼리 만들기
AGGR_CONCAT, REPLACE, CHR 함수로 테이블 내의 데이터를 원하는대로 나열할 수 있다.
AGGR_CONCAT을 이용하면 여러 행의 데이터를 하나의 컬럼으로 모아서 보여줄 수 있다.
SELECT AGGR\_CONCAT(LEVEL,',')
FROM DUAL
CONNECT BY LEVEL < 10
위 쿼리를 수행하면 다음과 같이 한 행에 모든 행의 값을 ,로 구분해서 반환해준다.
AGGR_CONCAT(LEVEL,',')
1,2,3,4,5,6,7,8,9
1 row selected.
USER_TAB_COLUMNS와 같은 뷰에 활용하면 효과적인데, 특정 DATA_TYPE만 선택해서 쿼리를 생성하거나 DATA_TYPE에 따라 별도의 처리를 해줄 수 있다.
DBA_DATA_FILES 뷰에서 DATA_TYPE이 숫자인 컬럼만 골라서 조회하는 쿼리를 AGGR_CONCAT 함수를 이용해서 만들어낼 수 있다. 다음과 같이 조회하면
SELECT 'SELECT ' ||
AGGR\_CONCAT(COLUMN\_NAME,',') ||
' FROM DBA\_DATA\_FILES'
FROM
DBA\_TAB\_COLUMNS
WHERE TABLE\_NAME='DBA\_DATA\_FILES'
AND DATA\_TYPE='NUMBER'
아래와 같은 결과를 받을 수 있다.
'SELECT'||AGGR_CONCAT(COLUMN_NAME,',')||'FROMDBA_DATA_FILES'
SELECT FILE\_ID,BYTES,BLOCKS,RELATIVE\_FNO,MAXBYTES,MAXBLOCKS,INCREMENT\_BY FROM DB
A\_DATA\_FILES
1 row selected.
linesize가 충분하지 않다면, 주어진 linesize 만큼 개행이 되어 추가적인 수작업이 필요할 수 있는데 이때 REPLACE와 CHR 함수를 이용하면 적당히 처리하기 쉽게 개행을 시킬 수 있다.
다음과 같이 ','를 ','||CHR(10)||CHR(13) 으로 변경시켜주면 ,를 ,\n으로 변경시킴으로써, 의도적으로 개행을 시켜 linesize로 인해 문자열이 망가지는 문제를 해결할 수 있다.
SELECT 'SELECT ' ||
REPLACE(
AGGR_CONCAT(COLUMN_NAME,',')
,',',','||CHR(10)||CHR(13)
)||
' FROM DBA_DATA_FILES'
FROM
DBA_TAB_COLUMNS
WHERE TABLE_NAME='DBA_DATA_FILES'
AND DATA_TYPE='NUMBER'
위 쿼리를 수행하면 다음과 같은 결과를 반환받는다.
'SELECT'||REPLACE(AGGR_CONCAT(COLUMN_NAME,','),',',','||CHR(10)||CHR(13))||'FROM
--------------------------------------------------------------------------------
SELECT FILE_ID,
BYTES,
BLOCKS,
RELATIVE_FNO,
MAXBYTES,
MAXBLOCKS,
INCREMENT_BY FROM DBA_DATA_FILES
1 row selected.
자주 사용하는 CHR
- CHR(9)
- \t(탭)
- CHR(10)
- \n(줄바꿈)
- CHR(13)
- \r(행의 시작)
- CHR(38)
- &(앰퍼샌드)
- CHR(39)
- '(따옴표)
- CHR(44)
- ,(쉼표)
Oracle에서는LISTAGG,Impala에서는GROUP_CONCAT함수를 이용해서AGGR_CONCAT과 같은 기능을 할 수 있다.
'개발 > sql' 카테고리의 다른 글
[sql] MSSQL 무료 접속 툴 다운로드 (0) | 2020.05.20 |
---|---|
[sql] REPLACE : 특정 문자를 찾아 바꾸기 [펌] (0) | 2020.05.13 |
[cubrid] pk 수 증가 방법 [펌] (0) | 2020.05.11 |
[cubrid] alter column 방법 (0) | 2020.05.11 |
[cubrid] PHP를 이용하여 CUBRID 사용할 때의 주의점 [펌] (0) | 2020.05.11 |