SQL 함수
1. 오라클 함수
1) ASCII 문자 변환
select chr(65) from dual; //A select chr(97) from dual; //a |
2) || 결합연산자
A || B -> A와 B를 연결시킴
select ename || '의 직급은 ' || job || '입니다' from emp; |
3) concat(칼럼명, '문자열') -> 칼럼에 해당하는 문자열을 붙임
select concat('로미오와 ','줄리엣') from dual; |
select concat(ename, '의 직급은 '), job from emp; |
select concat(concat(ename, '의 직급은 '), job) from emp; |
4) sysdate -> 시스템의 현재 날짜/시간을 리턴하는 함수
select sysdate from dual; //19-07-22 select sysdate+100 from dual; //19-10-30 select sysdate-100 from dual; //19-04-13 |
5) rownum : 행(레코드) 번호
rowid : 행(레코드)의 주소값
의사칼럼(모조칼럼)
select empno,select empno, ename from emp; |
select rownum, empno, ename from emp; |
select rowid, empno, ename from emp; |
select rowid, rownum, empno, ename from emp; |
6) 두 날짜 사이의 개월 수 계산 함수
select months_between('2019-09-01','2019-07-01') from dual; |
7) to_date('날짜문자열') -> 문자열을 날짜형으로 변환
select to_date('2019-05-20') from dual; |
select to_date('2019-05-20')-to_date('2019-05-05') from dual; |
8) to_char(날짜, '출력형식') -> 날짜자료형의 데이터를 문자변환하는 함수
select to_char(sysdate,'yyyy-mm-dd am hh:mi:ss day') from dual; |
select to_char(sysdate,'yyyy-mm-dd am hh24:mi:ss day') from dual; --24시간 기준 |
9) to_number('숫자형태의 문자열') -> 숫자변환 함수, 내부적으로 to_number()가 호출됨
select 100+10, 100-10, 100*10, 100/10 from dual; |
select '100'+1 from dual; //100 select to_number('100')+1 from dual; //100 |
10) 숫자함수
- trunc(숫자1, 자리수) -> 버림, 숫자1을 소숫점 자리수에서 절사
- round(숫자1, 자리수) -> 숫자1을 소숫점 자리수에서 반올림
- ceil(숫자1) -> 올림
11) 급여평균, 급여합계, 최고급여, 최저급여, 갯수
select avg(sal) |
문제) 각 직원들에 대해 직원의 이름과 근속연수를 구하시오. 단, 근속연수는 연단위를 버림하여 나타내시오.
--오늘날짜-입사일 select ename, sysdate-hiredate from emp; select ename, trunc((sysdate-hiredate)/365) as 근속연수 from emp; |
12) decode함수 -> decode(A, B, A==B일 때의 값, A<>B일 때의 값)
- A<>B일 때의 값을 생략하면 null로 처리됨.
- decode함수의 매개변수의 갯수는 다중조건에 의해 늘어날 수 있음
예) 주민번호를 이용해서 성별 출력
※ SQL문은 인덱스가 1부터 시작
select substr('8912303',7,1) from dual; select decode(substr('8912303',7,1),3,'남자','여자') from dual; |
13) lpad 함수 -> lpad(칼럼명, 자리수, '빈칸채우기')
- 해당칼럼의 자릿수에 맞게 빈칸을 채우기
예) 각 직원의 이름, 직급, 급여를 나타내는데 단, 급여는 5자리로 나타내며 부족한 자리수는 '*'로 표시한다.
월급이 300이상인 직원만 나타내시오.
select ename, job, lpad(sal,5,'*') from emp where sal>=300; |
문제) 각 직원들에 대해서 직원의 이름과 근무개월수를 나타내는데 근무개월수가 100개월 이상인 직원만 나타내시오.
근무개월수는 소수 부분을 제외한 정수부분만 나타내시오
select ename, trunc((sysdate-hiredate)/12) as 근무개월수 from emp where trunc((sysdate-hiredate)/12)>=100; |
문제) 전체 직원에 대하여 직원의 이름과 직급, 총 근무주(week)수를 구하시오
(단, 근무주수가 많은 직원부터 나타내고, 근무주수가 같으면 이름에 대하여 오름차순 정렬하시오)
select ename, job, trunc((sysdate-hiredate)/12/4) as 근무week from emp order by trunc((sysdate-hiredate)/12/4), ename; |
'공부 > SQL 활용' 카테고리의 다른 글
7월25일 - SQL 활용 5 : JOIN (0) | 2019.07.25 |
---|---|
7월24일 - SQL활용 4 : View & Index (0) | 2019.07.24 |
7월22일 - SQL 활용연습문제 (0) | 2019.07.22 |
7월19일 - SQL 활용 2 (0) | 2019.07.19 |
7월18일 - SQL활용 1 (0) | 2019.07.18 |