초급의 끄적거림

[SQL] 함수 본문

DB/Oracle

[SQL] 함수

codingD 2019. 7. 22. 21:19

[ASCII 문자변환]

 select chr(65) from dual;   대문자 A
 select chr(97) from dual;  소문자 a

 

[ || 결합연산자]

⊙ A || B : A와 B를 연결시킴

 select ename || '의 직급은 ' || job || '입니다' from emp;

 

 

 

 

 

 

 

 

 

[concat (칼럼명, '문자열')]

⊙ 칼럼에 해당하는 문자열을 붙임

 

 

select concat ('로미오와', '줄리엣') from dual;
select concat(ename, '의 직급은'), job from emp;
select concat(concat(ename, '직급은'), job) from emp;

 

 

[sysdate]

⊙ 시스템의 현재 날짜/시간을 리턴하는 함수

select sysdate from dual;
select sysdate+100 from dual;
select sysdate-100 from dual;

 

 

 

 

[★ rownum / rowid ★]

⊙ rownum : 행(레코드) 번호 (주로 메이커에서 알아서 붙여주는 번호)

⊙ rowid     : 행(레코드)의 주소값 (그 줄이 있는 곳의 메모리 주소값, 사용빈도 ↓

⊙ 의사칼럼 (모조칼럼)

 

select empno, ename from emp;
select rownum, empno, ename from emp;
select rowid, empno, ename from emp;

 

 

select rownum, rowid, empno, ename
 from emp;

 

 

 

 

 

 

 

 

[날짜 함수]

⊙ 두 날짜 사이의 개월 수 계산 함수

  : select months_between ('YYYY-MM-DD', 'YYYY-MM-DD') from dual;   - 앞 날짜에서 뒤 날짜를 빼기 때문에 앞 날짜가 커야함

select months_between('2019-09-01','2019-07-05') from dual;

 

⊙ to date('날짜문자열') : 문자열을 날짜형으로 변환

select to_date('2019-05-20') from dual;
select to_date('2019-05-20')-to_date('2019-05-05') from dual; 

 

 

 to char(날짜, '출력형식') : 날짜자료형의 데이터를 문자변환한 함수

 select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss day') from dual;

 select to_cahr(sysdate, 'yyyy-mm-dd 24hh:mi:ss day') from dual;

 

 

 

[숫자 함수]

⊙ to_number('숫자 형태의 문자열') → 내부적으로 to_number()가 호출됨

select 100+10, 100-10, 100*10, 100/10 from dual;

 

 

 select '100'+1 from dual;   ▶ 문자열 100 +1 java에서는 불가능하지만 db에서는 101이 나오면서 가능

= select to_number('100')+1 from dual;

 

 trunc(숫자1, 자리수)  버림, 숫자1을 소수점 자리수에서 절사
 round(숫자1, 자리수)  반올림, 숫자1을 소수점 자리수에서 반올림
 ceil(숫자1)  올림

 

⊙ 예제

...더보기

 문) 급여평균, 급여합계, 최고급여, 최저급여, 개수

 select avg(sal), sum(sal), max(sal), min(sal), count(sal) from emp;    - null값은 count 되지 않음

 select avg(sal), round(avg(sal),2), ceil(avg(sal)), trunc(avg(sal),1) from emp;

 

 문) 각 직원들에 대해서 직원의 이름과 근속연수(오늘날짜-입사일)를 구하시오. (단, 근속연수는 연단위를 버림하여 나타내시오)

 ① 오늘날짜 - 입사일 = 일한 날수

 select ename, sysdate-hiredate from emp;

 

 ② 근속연수를 구해야하기 때문에 일한 날 수/365

 select ename, (sysdate-hiredate)/365 from emp;

 

 ③ 연단위만 남기고 버림

 select ename, trunc((sysdate-hiredate)/365),1) as 근속연수 from emp;

 

 

[decode 함수]

⊙ decode (A, B, A==B일 때의 값, A<>B일 때의 값)

    A<>B일 때의 값을 생략하면 null로 처리됨, decode 함수의 매개변수의 개수는 다중조건에 의해 늘어날 수 있다

⊙ 예제

예) SQL문은 인덱스가 1부터 시작, 주민번호를 이용해서 성별 출력
select substr('8912303', 7, 1) from dual;      - 3 이 나와서 남자임을 알 수 있음

select decode(substr('8912303', 7, 1), 3, '남자', '여자') from dual;
 → substr('8912303', 7, 1) 가 3이 맞으면 '남자', 아니면 '여자'

 

[lpad 함수]

⊙ lpad(칼럼명, 채워야할 총 자리수, '못 채웠을 경우 대신 들어갈 내용')

문) 각 직원의 이름, 직급, 급여가 300이상인 직원만을 나타내는데 단, 급여는 5자리로 나타내며 부족한 자리수는 '*'로 표시한다.
select ename, job, lpad(sal, 5, '*')
from emp
where sal>=300;

'DB > Oracle' 카테고리의 다른 글

[SQL] 서브쿼리 (Sub Query)  (0) 2019.07.23
[SQL] group 외 예제  (0) 2019.07.23
[SQL] 활용 연습 문제  (1) 2019.07.22
[SQL] 시퀀스 / distinct / 조건절  (0) 2019.07.21
[SQL] 제약조건 (constraint) 2  (0) 2019.07.20
Comments