Oracle DB 함수

20180423 OracleDB

 

문자 함수

  • CONCAT : 스트링을 이어 붙입니다.
select concat('Good','Morning')from dual ;

  •  SUBSTR : 문자열의 시작부터 갯수만큼 반환합니다. 자바와는 다르게 첫 번 째 문자열 부터 시작합니다.
select substr ('Cracker' , 1 , 3) from dual;

select * from emp where substr(ename,-1,1)='N';

select * from emp where substr(hiredate,4,2)=12;

select ename,substr(hiredate,1,2) "HireYear", substr(hiredate,4,2) "HireMonth" from emp  ;

 

  • LENGTH : 문자열의 길이를 반환합니다.
select length('String') from dual;

 

  • REPLACE : 문자열의 지정한 부분부터 대체합니다.
select replace ('Jack' , 'k' ,'k Black' ) from dual;

 

  • UPPER, LOWER, Initcap: UPPER는 대문자로, LOWER는 소문자로, Initcap은 첫 글자만 대문자로 변환해줍니다.

 

숫자 함수

  • ROUND : 반올림을 해줍니다. 뒤의 수는 반올림 할 자리수 디폴트일 경우 소수점 첫째 자리에서 반올림합니다.
select round (45.923,2) from dual;
select round (45.923) from dual;
select round (45.923,-1) from dual;

 

 

 

 

  • TRUNC : 지정한 자리까지만 남기고 모두 잘라버립니다.
select trunc(45.923,2) from dual;
select trunc(45.923,-1) from dual;

 

 

 

  • CEIL : 올림기능입니다.
select ceil(45.923) from dual;

 

  • MOD  : 나눈 후 나머지 값으로 계산을 합니다.
select * from emp where mod(empno,2)=1 and comm is not null;

 

날짜 함수 & 연산

  • MONTHS_BETWEEN : 두 날짜 사이가 몇 개월인지 반환합니다.
select ename, trunc(months_between(sysdate,hiredate)) aba from emp;

  • ADD_MONTHS : 특정 날짜에 개월 수 를 더합니다.
select ename, trunc(Add_months(hiredate,6))d from emp;

  • (날짜 + | - 숫자) 날짜 : 날짜가 반환됩니다.
select sysdate+100 "D-day" from dual;

 

  • (날짜 - 날짜) : 기간이 나옵니다. 라운드를 붙이지 않으면 시각까지 소수점으로 계산되기에 과감히 잘랐습니다.
select round(sysdate - to_date('92/01/01')) from dual;

 

형 변환 함수

OracleDB에서도 Java와 같이 명시적 형 변환과 묵시적 형 변환이 있습니다. Java와 같이 작은쪽에서 큰 쪽으로 가는것은 묵시적으로 변환이 되지만, 반대의 경우에는 명시적으로 선언 해 주어야 합니다.

  • to_number
  • to_date
CREATE table t1 (col number , col2 date);

임시로 테이블을 만들었습니다.

INSERT into t1 (col1, col2) VALUES('123','18/04/23');
INSERT into t1 VALUES(to_number('123'), to_date('18/04/23'));
INSERT into t1 VALUES(123, sysdate);

위에서부터 차례대로 묵시적 형 변환, 명시적 형 변환, 마지막은 보통의 방법대로 넣었습니다. 결과는 다 같습니다.

  • to_char
select ename , hiredate from emp where hiredate = to_char(19810220);
select ename , hiredate from emp where to_char(HIREDATE, 'YYYYMMDD')='19810220';

SELECT ENAME, to_char(hiredate, 'YYYY"YEAR "MM"MONTH "DD"DAY "')HIREDATE FROM EMP;

 

SELECT to_char(sysdate, 'YYYY/MM/DD , HH24:MI:SS') from dual;