Written by
최태열
on
on
Oracle DB 2
함수
- 길이
select count(*) from emp; -- 전체 row의 수
select length(ename) from emp; --ename의 길이
select lengthb(ename) from dual; -- 문자열 바이트 수
- 숫자함수
select abs(-10) from dual; --절댓값
select round(5.6) from dual; --반올림
select trunc(1234.123, 0) from dual; -- 1234 0번째자리 이후로 버림
select trunc(1234.123, -1) from dual; -- 1230 정수 1번째자리 이후로 버림
select mod(7,2) from dual; -- 나머지
select power(3,2) from dual; -- 9 제곱 구하는 함수
- 문자함수
select ename from emp where lower(job)='manager'; -- 소문자
select ename from emp where job=upper('manager'); -- 대문자
select empno,ename from emp where job=upper('manager') order by empno asc;
-- from절 -> where -> select절 -> order by절 순으로 실행
-- substr(데이터, 시작위치, 추출할 개수)
select substr('엔코아 플레이데이터',5,6) from dual; --플레이데이터
-- date 타입에도 substr() 함수 사용 가능
-- 2월에 입사한 사원의 이름과 입사일
select ename, substr(hiredate,7,2) from emp where substr(hiredate,4,2)='02';
select trim(' abc ') from dual; -- 문자열 앞뒤의 잉여 여백 제거
- 날짜함수
select sysdate-1 어제, sysdate 오늘, sysdate+1 내일 from dual;
-- system 상의 날짜
select round(sysdate-hiredate) 근무일수 from emp;
-- 날짜간에도 연산 가능
-- add_months(날짜, 더할 개월수)
select sysdate, add_months(sysdate, 6) from dual;
-- months_between(날짜, 날짜)
select months_between(sysdate,'1996-06-22') from dual;
-- next_day(날짜, '요일') 날짜 기준으로 가장 가까운 요일의 날짜
select next_day(sysdate, '토요일') from dual;
-- 주어진 날짜를 기준으로 해당 달의 가장 마지막 날짜
select last_day(sysdate) from dual;
- 형 변환 함수
- to_char() : 날짜 -> 문자 , 숫자 -> 문자
-- 날짜
select to_char(sysdate, 'yyyy/mm/dd') from dual;
--dy는 요일 의미
select to_char(sysdate, 'yyyy-mm-dd dy') from dual;
-- hh:mi:ss = 12시간을 기준으로 시분초
select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss') from dual;
-- hh24:mi:ss = 24시간을 기준으로 시분초
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;
-- hh:mi:ss am = am과 pm은 오전 오후 의미, am을 주로 사용
select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss am') from dual;
--숫자
-- 9 : 실제 데이터의 유효한 자릿수 숫자 의미(자릿수 채우지 않음)
-- 0 : " (자릿수 채움)
-- . : 소수점 표현
-- , : 원단위 표현
-- $ : 달러
-- L or l : 로케일의 줄임말(os 자체의 인코딩 기본 정보로 해당 언어의 기본 통화표현)
select to_char(1234, '9999.99') from dual;
select to_char(1234, '$9999,99') from dual;
select to_char(1234, '9999') from dual;
select to_char(1234, '999,999') from dual;
select to_char(1234, '99999') from dual;
select to_char(1234, '00000') from dual;
select to_char(1234, 'L99,999') from dual;
select to_char(1234, 'l99,999') from dual;
- to_number() : 문자열을 숫자로 변환
select to_number('20,000', 99999)/2 from dual;
select to_number('20,000', '99,999') - to_number('10,000', '99,999') from dual;
- 조건식 함수
-- decode()-if or switch문과 같은 함수 ***
-- decode(조건칼럼, 조건값1, 출력데이터1,
-- 조건값2, 출력데이터2,
-- ...,
-- default값) from table명;
select deptno, decode(deptno, 10, 'A등급',
20, 'B등급',
'C등급') from dept;
select ename, sal, decode(job, 'ANALYST', sal*1.05,
'SALESMAN', sal*1.1,
'MANAGER', sal*1.15,
'CLERK' , sal*1.2,
sal) as 인상분 from emp;
Discussion and feedback