본문 바로가기

SQL

[ORACLE] INSTR FUNCTION 내가 원하는 컬럼의 값에 내가 원하는 구문이 포함되어 있는 여부를 확인할 때 사용한다. 그냥 포함되어 있는 여부를 확인하고 싶다면 'LIKE' 함수를 사용하면 되지만, 만약 포함되어 있고, 포함되어 있는 위치가 어디인지 알고 싶다면? 그럴때 사용하는 함수가 'INSTR()' 함수이다. 사용하는 방법은 생각외로 아주 간단하다. INSTR('비교할 대상', '비교하고자하는 값', 비교를 시작할 위치, 검색된 결과의 순번) SAMPLE 1 SELECT INSTR('TEST SAMPLE CODE', 'E', 1, 1) AS INSTR_RS FROM DUAL - 'TEST SAMPLE CODE'라는 구분에서 'E'를 찾는데 1부터 시작을 해서 1번째 찾아지는 'E'의 위치는 어디인가? EXECUTE RESULT .. 더보기
[오라클] START WITH 와 CONNECT BY START WITH 와 CONNECT BY 를 이용하여 데이터를 계층 구조로 조회할 수 있다. 예1) SELECT LEVEL, EMPNO, ENAME, MGR FROM EMP START WITH JOB = 'PRESIDENT' CONNECT BY PRIOR EMPNO = MGR; ==> 직업이 PRESIDENT를 기준으로 사원과 관리자의 관계를 계층 구조로 조회 예2) SELECT LPAD( ' ', 4*(LEVEL-1) ) || ENAME, EMPNO, MGR, JOB FROM EMP START WITH JOB = 'PRESIDENT' CONNECT BY PRIOR EMPNO = MGR; ==> 예1의 결과를 ㅏ지고 LPAD 함수를 이용하여 ENAME 왼쪽에 공백을 추가 예3) SELECT LPAD( .. 더보기
Toad 사용법 1 자꾸 까먹는다. 더보기
오라클 데이터 타입 레코드 크기 : 테이블을 구성하고 있는 컬럼의 bytes 값을 더하면 레코드의 크기가 나온다. 데이터처리 건수 : 말 그대로 하루에 데이타를 처리하는 건수 데이터량 : 테이블 별 레코드 크기에 데이터처리 건수를 곱해서 합해주면 하루 데이터량이 나온다. 데이터 타입별로 bytes 크기는 다음과 같다. DATA TYPE 설 명 VARCHAR2(n) 가변 길이 문자 데이터(1~4000byte) CHAR(n) 고정 길이 문자 데이터(1~2000btye) NUMBER(p,s) 전체 p자리 중 소수점 이하 s자리(p:1~38, s: -84~127) DATE 7btye(BC 4712년 1월 1일부터 AD 9999년 12월 31일) LONG 가변 길이 문자 데이터(1~2Gbyte) CLOB 단일 바이트 가변 길이 문자.. 더보기
distinct select distinct field1 from tb_test 이렇게 하면 field1에 있는 데이터 중 중복을 제거하고 유니크 한 값들만 나온다. 그러나 시간 개념이 들어가서 최신의 데이터에 해당하는 row의 값을 다 가져 오고 싶다면? distinct에 시간까지 걸면 모든 데이터가 다 유니크 해버린다. oracle db 데이터 중 특정 필드의 중복을 제거하고 최신의 데이터 1개만 가져오기. 숨어 있던 rowid가 이때 도움을 준다. select * from tb_test where reg_tm between start_tm and end_tm and rowid in (select max(rowid) from tb_test group by field1) 중복이 되면 안되는 필드를 group by 해서.. 더보기
where 1=1 and A=xxx and B=xx ....여기서 where 1=1 의 의미?! 1=1 은 True 를 나타냅니다. 따라서 아래와 같은 문장은 테이블의 전체 데이터를 가져오는 것이지요. 생략해도 같은 결과가 나옵니다. SELECT * FROM 테이블명 WHERE 1=1 SELECT * FROM 테이블명 님께서 where 1=1 and A=xxx and B=xx .... 조건절을 주셨는데 1=1 은 생략 가능하므로 where A=xxx and B=xx .... 요렇게 사용하셔도 무방합니다. 그래서 1=1 은 잘 사용하지 않고 1=2 등.. false 를 나태내는 조건절을 이용하여 기존테이블에서 빈 테이블을 생성하는데 사용하곤 합니다. select * into 테이블2 from 테이블 where 1=2 => 테이블 의 구조와 같고 데이터가 없는 테이블2 생성 더보기
[ORACLE] RANK, ROW_NUMBER, DENSE_RANK -> 펌글 이 세개의 함수는 오라클에서 그룹으로 묶고, 그것에 대한 순위를 정하는 함수이다. SELECT ROW_NUMBER() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼]) , RANK() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼]) , DENSE_RANK() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼]) FROM TABLE_NAME; 기본입력된 데이타가 5명의 학생에 대한 성적정보가 들어있고, 1등이 2명이라면 등수가 어찌될까? 결과는 다음과 같다. ROW_NUMBER : 1, 2, 3, 4, 5 RANK : 1, 1, 3, 4, 5 DENSE_RANK : 1, 1, 2, 3, 4 ROW_NUMBE.. 더보기
ORACLE 함수정의 ## 문자함수 1. 숫자를 문자로 변환 select chr(75) from dual; ex) 문자를 숫자로 select TO_NUMBER(75) from dual; 2. 문자값 결합 select CONCAT(CONCAT(ename, 'is a '),job) from emp; 3. 첫번째 문자 대문자로 select INITCAP('the soap') from dual; 4. 모두 소문자로 select LOWER('WEBPD4U') from dual; 5. 왼쪽 나머지 공간을 지정한 문자로 채우기 LPAD select LPAD('Page 1',15,'*') from dual; 6. 왼쪽 부터 지정된 단어가 발견되면 제거 select LTRIM('xyxXxyLAST WORD','xy') from dual; 7.. 더보기
ORACLE 특정필드값을 우선순위 SELECT notice_id, sect_id, title, content, title_tag, url, file_name, read_cnt, reg_dt, category FROM TUSR_NOTICE ORDER BY DECODE(notice_id, '299', 1), reg_dt DESC SELECT * FROM kinquiz ORDER BY DECODE( CASE WHEN (SYSDATE >= start_dt AND SYSDATE 더보기
DATE 형변환 to_char(sysdate,'yyyy-mm-dd day hh:mi:ss am') 더보기