* 이 팁들은 oracleclub.com의 질문과 답변에 올라온 글을 제가 정리했습니다.
1. 10%를 랜덤하게 가져옵니다.(오라클 8.1.7 이상부터 지원이 됩니다.) [하얀그림자님 답변글]
SQL> SELECT *
FROM table_name
SAMPLE (10);
2. 오라클에서 CASE문 사용 예제 [하얀그림자님 답변글]
SQL>SELECT col,
CASE
WHEN col >= 0 AND col < 6 THEN ’A’
WHEN col >= 6 AND col < 14 THEN ’B’
WHEN col >= 14 AND col < 22 THEN ’C’
WHEN col >= 22 THEN ’D’
END
FROM table_name;
3. 해당년도의 선택된 주의 첫번째 날자를 구하고 싶습니다.[석철희님 답변글]
[질문]
해당년도의 선택된 주의 첫번째 날자를 구하고 싶습니다.
예로 2002년 36번째 주의 첫번째 날자는 2002/09/02입니다.
2002년 36번째주를 가지고 ’2002/09/02’이란 해당주의 첫번째 날자를 구하고 싶습니다.
[답변][석철희님 답변글]
SQL> SELECT NEXT_DAY(TO_DATE(해당년도||’0101’,’RRRRMMDD’) + (선택한주 - 2) * 7, 2)
FROM DUAL;
SQL> SELECT NEXT_DAY(TO_DATE(2003||’0101’,’RRRRMMDD’) + (2 - 2) * 7, 2)
FROM DUAL;
NEXT_DAY
--------
03/01/06
==> FROM 앞에 2 는 월요일을 그 주에 첫번째로 선택한 거니깐 일요일을
그 주의 첫번째 날로 바꾸시려면 1로 바꾸시면 됩니다.
4. DB 테이블 내용 복사 대해서[하얀그림자님 답변글]
1). Table A와 Table B 가 있는데. A의 내용을 B로 복사하는 방법
SQL>INSERT INTO b SELECT * FROM a;
2). Table A가 있고 Table B를 생성하면서 복사하는 방법
SQL>CREATE TABLE b AS SELECT * FROM a;
3). Table A가 있고 Table A와 구조가 같고 내용은 복사하지 않는 Table B 생성 방법
SQL>CREATE TABLE b AS SELECT * FROM a WHERE 1 = 2;
5.점수별로 몇명씩 있는지 알고 싶습니다 .[배경열님 답변글]
[질문]
이름 점수
===============
홍길동 90
김길동 98
이길동 75
성춘향 60
이동국 30
최성국 100
김남일 85
일때 .....
점수별로 몇명씩 있는지 알고 싶습니다 ..
원하는 결과값
=============
점수대 명수
===============
90-100 3
80-89 1
0-79 3
[답변 ]
Sign Function을 쓰세요.
SELECT
DECODE(SIGN(점수-89),1,’90-100’,
DECODE(SIGN(점수-79),1,’80-89’,’0-79’)),
COUNT(*)
FROM
성적
GROUP BY
DECODE(SIGN(점수-89),1,’90-100’,
DECODE(SIGN(점수-79),1,’80-89’,’0-79’))
ORDER BY 1 DESC
6. 컬럼에 해당하는 테이블명 알아내기..
SQL>SELECT TABLE_NAME
FROM USER_TAB_COLS
WHERE COLUMN_NAME =’BOARD_ID’
이렇게 하시면 됩니다..
컬럼관련 정보는 USER_TAB_COLS 데이터사전을 통해 확인할 수 있습니다.
COLS라는 시노님을 이용해도 됩니다.
SQL>SELECT COUNT(COLUMN_NAME) "Column Count"
FROM COLS
WHERE TABLE_NAME =’STORM_BOARD’
시간날때마다 틈틈히 추가하겠습니다. |
|