728x90

먹보고릴라님 | 쿼리 | 2013-11-18 10:22:45




먹보고릴라 2013-11-18 10:23:19
안녕하세요

DB2 공부를 하다 보니 궁금한 부분이 있어 질문 하게 되었습니다.

제가 백업된 TABLE을 TEST Table에 복원 시키고 싶은데요.

백업된 table의 컬럼 값 중 두개가 timestamp 형식 입니다. 

제가 궁금한 부분은 이미 Timestamp 형식으로 이루어져있던 백업 값을 

test table에 insert 하고 싶은데 형식이 맞지 않아 insert가 되지 않네요

그래서 검색하여 보니 잘 이해가 가지 않고 

그냥 insert 구문 넣을 때 이미 시간이 적혀있는 데이터 값이 아닌 그 컬럼 자리에

timestamp 라고 적어 컬럼값을 재 생성 하는 것 같습니다.

혹시 timstamp 형식으로 되어 있는 테이블에 데이터 값으로 하여 insert 시킬 수 있을까요?

pajama 2013-11-18 11:11:58
문자열을 입력하려는데 형식이 맞지않아 입력이 되지 않으시는게 맞으신가요?
그런 경우라면 timestamp_format(to_date와 동일)함수를 쓰시면 됩니다.


① timestamp 데이터타입이 포함된 테이블 생성
$ db2 "create table test(A varchar(10),b timestamp)"
DB20000I The SQL command completed successfully.

② 문자열 값 입력
$ db2 "insert into test(b) values('2013-11-18')"
DB20000I The SQL command completed successfully.

③ 입력된 값 확인
$ db2 "select * from test"

A B
---------- --------------------------
- 2013-11-18-00.00.00.000000


④ 형식이 다른 문자열 값 입력
$ db2 "insert into test(b) values('2013/11/18 15:30')"
DB20000I The SQL command completed successfully.

⑤ timestamp_format(to_date) 함수로 포맷을 지정하여 입력
$ db2 "insert into test(b) values(timestamp_format('2013/11/18 15:30','YYYY-MM-DD HH24:MI:SS'))"
DB20000I The SQL command completed successfully.

⑥ 입력된 값 확인
$ db2 "select * from test"

A B
---------- --------------------------
- 2013-11-18-00.00.00.000000
- 2013-11-18-15.30.00.000000

먹보고릴라 2013-11-18 11:29:24
안녕하세요
pajama 님 항상 좋은 답변에 많은 부분을 해결 하고 있습니다.
혹시 한가지 더 질문이 있습니다.
위에 주신 답변에 대하여 잘 되고 있는데요 
2013-11-13 오전 11:27:24 이런식으로 되어 있는 경우는 함수를 조금 변경하여 
5번과 같이 진행 하면 될까요?
또한 밑에 보이는 것 과 같이 "" 문자열을 사용했다고 하는데 ""를 사용 된 부분이 없는데 이런 메시지가 출력 되네요 해당 에러코드에 대하여 확인 하여 보면 형태를 변경하여 입력 하라고 나오고요.
SQL20448N TIMESTAMP_FORMAT 함수에 "" 출력 문자열을 사용하여 "2013-11-11 오후 1:35:57"을(를) 해석할 수 없습니다. SQLSTATE=22007


감사합니다.
좋은 하루 되세요.

먹보고릴라 2013-11-19 10:12:50
안녕하세요
pajama 님 도와주심에 감사합니다.

혹시 알려주신 timestamp_format 형식으로 입력하게 되면 오전인지 오후인지 디비에서 확인 못하고 그저 기본 값이 오전으로 입력 됩니다.
해당 디비에 timestamp 형식은 1~12로만 하여 오전인지 오후인지만 나눠서 값이 들어가게 되는데요
혹시 이부분은 알수 있는 방법이 있을까요?

감사합니다.
좋은 하루 되세요.

pajama 2013-11-20 16:54:18
① 테스트 테이블 생성
$ db2 "create table test(a varchar(10),b timestamp)"
$ db2 "create table test1(a varchar(100))"

② 테스트 데이터 입력 (문자열 형태 시간)
$ db2 "insert into test1 values varchar_format(current timestamp,'YYYY-MM-DD AM HH:MI:SS','ko_kr')"
$ db2 "insert into test1 values varchar_format(current timestamp - 10 hours,'YYYY-MM-DD AM HH:MI:SS','ko_kr')"

③ 테스트 데이터 확인
$ db2 "select * from test1"

A
----------------------------------------------------------------------------------------------------
2013-11-20 오후 04:39:08
2013-11-20 오전 06:41:54

2 record(s) selected.

④ 문자열 데이터를 TIMESTAMP 형태로 변환하여 입력
$ db2 "insert into test(b) select timestamp_format(a,'YYYY-MM-DD AM HH:MI:SS','ko_kr') from test1"

⑤ 입력한 데이터 확인
$ db2 "select * from test"

A B
---------- --------------------------
- 2013-11-20-16.39.08.000000
- 2013-11-20-06.41.54.000000

timestamp 포맷 ('YYYY-MM-DD AM HH:MI:SS') 에서 AM이든 PM이든 동일하게 작동하는 걸로 보입니다.
그리고 '오전','오후' 같이 한글은 'ko_kr'과 같이 로케일 이름을 써줍니다.

http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0007107.html

pajama 2013-11-20 18:59:21
그리고 AIX환경에서 좀 특이한 점이 있습니다만.. 환경변수 LANG이 EN_US가 아닌 다른 값으로 엔진을 시작했을때(db2start) timestamp_format, varchar_format이 제대로 동작하지 않는 부분이 있습니다.

varchar_format(current timestamp,'YYYY-MM-DD AM HH:MI:SS') 결과에서 시간이 오전,오후에 상관없이 
AM부분이 'en_US'일때는 'AM', 'ko_KR'일때는 '오전'으로만 나왔습니다. 그리고 timestamp_format에서 AM, PM등 키워드를 사용했을 때 오류가 발생했습니다. LINUX에서는 딱히 LANG변수의 영향은 받지 않는 것 같습니다만 어느정도 테스트 해본바로는 그렇습니다.
참고하세요.


먹보고릴라 2013-11-25 10:27:07
pajama 님 
안녕하세요

정말 좋은 정보 감사합니다.
너무 자세한 답변에 다시 한번 감사합니다.
알려주신 내용에 대하여 테스트 해본 결과 정상적으로 잘 들어가게 되었습니다.

오늘 하루도 좋은 하루 되시며
오늘은 비가 많이 오네요 감기 조심하세요
감사합니다.



728x90

+ Recent posts