tbadmin을 이용하여 excel 파일에 입력된 데이터를 import 해보자
Posted at 2012/10/30 18:17 | Posted in 개발자 이야기/티베로 (Tibero)
개 요 |
mysql에서 tibero로 데이터를 이관해야 하는데 중간에 정제 작업을 거쳐야 했다 딱히 마땅한 수정 프로그램이 없어서 mysql에서 csv 파일로 export 하여 다시 csv 파일을 엑셀에서 열어 수정 작업을 거치고 다시 tibero로 import 해야 하는 상황이었다.
준비과정 |
먼저 mysql에서 이관할 테이블을 csv 파일로 export 하고 (아래 링크 참조)
2012/10/30 - [개발자 이야기/MYSQL] - csv 파일을 이용하여 데이터 export import 하는 방법
엑셀에서 열어 데이터 수정을 실시하고 다시 csv 파일로 저장하는게 아니라 xls(2003 버젼) 으로 저장
(절대 xlsx 파일로 저장하면 안됨 tbadmin 에서 지원하지 않음)
TbAdmin 에서 |
tbadmin 메뉴에서 tool → ExpImp 메뉴 클릭 아래와 같은 창이 뜬다
Use Excel file 체크 후 Import 텝을 클릭 하면 아래와 같은 화면이 나온다.
source file 에는 import할 excel 파일을 선택하고 Destination table 에는 import 할 테이블을 선택한다 또 ignore the first line에 체크한다(단 엑셀파일 첫줄에 항목이름이 있다면 체크 바로 데이터가 있다면 체크하지 말것) Start Importing 클릭 하면 아래와 같은 화면이 뜬다.
전체필드에 입력하지 않을경우 필요없는 필드는 삭제해도 무관하다 적당히 필드 맵핑하고 ok 클릭하면 끝
with a as (
select '제주특별자치도 서귀포시 광평로 105 ( 안덕면, 통나무힐스 )' bigo from dual
union all
select '부산광역시 강서구 대저1동 4302-22' from dual
)
select bigo
, regexp_substr(bigo, '[^ ]+',1,1) a
, regexp_substr(bigo, '[^ ]+',1,2) b
, regexp_substr(bigo, '[^ ]+',1,3) c
, regexp_substr(bigo, '[^ ]+',1,4) d
, regexp_substr(bigo, '[^ ]+',1,5) e
from a
문자열 ';' 기준으로 아래 값들을
HT1816112121400121;로스엔젤레스;부산광역시 강서구 대저1동 4302-22
HT7014021412091123;대한민국;부산광역시 강서구 대저1동 4302-22
HT1611221911240214;오스트레일리아;부산광역시 강서구 대저1동 4302-22
A컬럼에 HT1816112121400121
B컬럼에 로스엔젤레스
C컬럼에 부산광역시 강서구 대저1동 4302-22
A,B,C 컬럼에 나누어 넣으려고 합니다...
SELECT BIGO, SUBSTR(BIGO,1,INSTR(컬럼,';')-1) A, REVERSE(SUBSTR(REVERSE(BIGO), 19, INSTR(REVERSE(BIGO), ';') -1)) B, REVERSE(SUBSTR(REVERSE(BIGO), 1, INSTR(REVERSE(BIGO), ';') - 1)) C
FROM 테이블명 WHERE BIGO LIKE '%;%'; 이렇게 했더니...
B에 들어가는 값들이 '로스엔젤레스;부산광역시' 또는 '대한민국;부산광역시 강서구' 이런식으로 들어가는데요...
B컬럼 구문 어느곳이 틀린건지 문의 드립니다...
그리고 가운데 '로스엔젤레스, 대한민국, 오스트레일리아' 만 가져오려고 구문을 짜봤는데
'로스엔젤레스;부산광역시' 이렇게 나옵니다...
SELECT BIGO
, REGEXP_REPLACE(SUBSTR(BIGO, INSTR(BIGO, ';', 1) +1), '\(;*\)') T
FROM (SELECT BIGO FROM 컬럼명);
두개의 쿼리에 대해 조언 부탁드리겠습니다.....
글 등 록 | 목록보기 |
-- 1. 어차피 a 는 고정 자리수일텐데 Instr 은 뭐하러 하나요?
-- 2. Why Reverse?
-- 3. 정규식 패턴 사용이 적절하지 않고요...
WITH
t
AS
(
SELECT
'HT1816112121400121;로스엔젤레스;부산광역시 강서구 대저1동 4302-22'
bigo
FROM
dual
UNION
ALL
SELECT
'HT7014021412091123;대한민국;부산광역시 강서구 대저1동 4302-22'
FROM
dual
UNION
ALL
SELECT
'HT1611221911240214;오스트레일리아;부산광역시 강서구 대저1동 4302-22'
FROM
dual
)
SELECT
bigo
-- 1. a 가 자리수 고정인 경우
, SUBSTR(bigo, 1, 18) a1
, SUBSTR(bigo, 20, INSTR(bigo,
';'
, 1, 2)-20) b1
, SUBSTR(bigo, INSTR(bigo,
';'
, 1, 2)+1) c1
-- 2. 자리수와 상관 없이
, SUBSTR(bigo, 1, INSTR(bigo,
';'
)-1) a2
, SUBSTR(bigo, INSTR(bigo,
';'
)+1, INSTR(bigo,
';'
, -1)-INSTR(bigo,
';'
)-1) b2
, SUBSTR(bigo, INSTR(bigo,
';'
, -1)+1) c2
-- 3. 정규식 이용
, REGEXP_SUBSTR(bigo,
'[^;]+'
, 1, 1) a3
, REGEXP_SUBSTR(bigo,
'[^;]+'
, 1, 2) b3
, REGEXP_SUBSTR(bigo,
'[^;]+'
, 1, 3) c3
FROM
t
;