Oracle/기타2010. 2. 24. 11:24
질문 :

테이블 A에 1,2,3,4,5,6,7  이라는 컬럼이 있습니다.

1,2,3 에는 그냥 고정값 a,b,c,가 각각 들어가고

4에는 해당 날짜 시간

5,6,7에는  5에는 4에서 적힌 년, 6에는 4에서 찍힌 월,7에는 4에서 찍힌  일을 넣을려고 합니다.

 

 1  2  3  4  5  6  7
 a  b  c  2009-09-05 00:00:30  2009  09 05
 a  b  c  2009-09-05 00:01:00  2009  09  05
 a  b  c  2009-09-05 00:01:30  2009  09  05


.

.

.

.

이런식으로 해서 30초 4컬럼에 30초 간격으로 오늘 날짜 까지 데이터를 30초 간격으로 넣어줄려고 하는데;;

어떻게 해야 하는지 모르겠네요.;;

데이터 출력을 위해서 임의의 값을 넣는건데.. 5,6,7 컬럼은 4의 값을 넣어야하고;;

2009년 9월부터 해서 오늘 일까지 30초 간격으로 데이터 넣는 방법좀 가르쳐주세여.ㅜ_ㅜ

데이터가 너무 많아서 인서트 적기는 힘드네요..ㅜ_ㅜ

 

부탁드리겠습니다





답변 :

먼저 테이블을 생성해줍니다.

SQL> create table t1(col1 varchar2(1),
                     col2 varchar2(1),
                     col3 varchar2(1),
                     col4 date,
                     col5 varchar2(4),
                     col6 varchar2(2),
                     col7 varchar2(2));



그리고 insert하려는 쿼리의 row수가 얼마나 되는지 알아봅니다.

SQL> select (sysdate-to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS'))*24*60*60/30 "level"
     from dual;



위 쿼리의 결과의 정수부분만 아래 쿼리의 level 뒤에 넣어줍니다.


SQL> insert into t1
     select 'a','b','c',
            to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30,
            to_char(to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30, 'YYYY'),
            to_char(to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30, 'MM'),
            to_char(to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30, 'DD')
     from dual
     connect by level <= 위 결과의 정수부분 넣는 곳;



PS) 참고로 날짜가 년월일밖에 나오지 않는다면 아래와 같이 세션의 날짜포맷을 변경해줍니다.


SQL> alter session set nls_date_format = 'DD-MON-RR HH24.MI.SS';


질문과 답변 원문 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10205&docId=105498493

'Oracle > 기타' 카테고리의 다른 글

database의 feature의 사용유무 체크뷰  (0) 2010.05.04
데이터베이스 명의 최대 바이트 수는?  (0) 2010.04.01
import 성능 향상시키는 방법  (0) 2010.02.11
reorganization  (0) 2010.02.11
Read the alert log with SQL  (0) 2010.01.13
Posted by 자수성가한 부자