본문 바로가기
개발 수업/DB

[Oracle/SQL] SQL함수(숫자 함수, 문자 함수)

by 오늘 하루s 2023. 6. 9.
728x90
더보기

Day29. 230609

- dual : 결과물 하나만 보여줌.

1
2
select 1+1
from dual;
cs

 

- 테이블명 연산도 가능

1
2
select empno, ename, sal, sal*12
from emp;
cs

 

1
2
3
4
5
6
7
select empno, ename, sal, sal*12
from emp
where empno=7369;
 
select empno, ename, sal, sal*12
from emp
where empno='7369';
cs

 

위 아래 같은 결과.

위의 7369의 값 오라클에서 암묵적으로 바꿔줌.

 

 

숫자 함수

abs(절댓값)

1
2
select abs(-100),abs(0),abs(100)
from dual;
cs

 

ceil(올림), floor(내림)

1
2
select ceil(10.523),floor(10.123)
from dual;
cs
실행 결과

 

round(숫자[,자릿수]), trunc(숫자[,자릿수])

round(숫자[,자릿수]) : 반올림

자릿수 : 소수 1째자리(기본.0), 소수2번째자리(1), 소수3번째자리(2), 일의자리(-1), 십의자리(-2)

1
2
3
4
select round(418.525,-2),round(418.525,-1),
       round(10.525),round(10.525,0),
       round(10.525,1),round(10.525,2),round(10.525,3)
from dual;
cs

실행 결과

 

trunc(숫자[,자릿수]) : 절삭

자릿수 : 소수 1째자리(기본.0), 소수2번째자리(1), 소수3번째자리(2), 일의자리(-1), 십의자리(-2)

1
2
3
4
select trunc(418.525,-2),trunc(418.525,-1),
       trunc(10.525),trunc(10.525,0),
       trunc(10.525,1),trunc(10.525,2),trunc(10.525,3)
from dual;
cs
실행 결과

 

예제)

전체사원 평균급여를 올림, 내림, 소수점 첫번째 자리까지 출력

1
2
select avg(sal),ceil(avg(sal)),floor(avg(sal)),round(avg(sal),0)
from emp;
cs

 

 

 

문자함수

INITCAP(char) , LOWER(char) , UPPER(char)

ciel(올림)

INITCAP(char) : char의 첫 문자는 대문자로, 나머지는 소문자로 반환

LOWER(char) : char의 매개변수로 들어오는 문자를 모두 소문자로 반환

UPPER(char) : char의 매개변수로 들어오는 문자를 모두 대문자로 반환

1
2
3
4
select ename, initcap(ename), lower(ename), upper(lower(ename))
from emp
where deptno=30
order by ename asc;
cs

실행 결과

 

 

연결연산자 ||

1
2
3
4
select ename || '귀하', concat(ename,'귀하')
from emp
where deptno=30
order by ename asc;
cs

실행 결과

 

-> 모두 결과가 동일하게 나옴.

 

 

substr(char, pos, len) , substrb(char, pos, len)

substr(char, pos, len)

중요!★★★★★

- 문자열의 부분 추출

- 문자열 char을 대상으로 position부터 length만큼 추출
- pos이 0이 오면 디폴트 값인 1.즉 첫 번째 문자를 가리킨다.
- pos이 음수가 오면 문자열char의 가장 맨 끝에서 시작한 상대적 위치를 의미
- len이 생략되면 position부터 문자열 끝까지 반환

1
2
3
4
select substr('abcdefg',0),substr('abcdefg',1),
       substr('abcdefg',1,3),substr('abcdefg',-1,3),
       substr('abcdefg',5,3),substr('abcdefg',-3,3)
from dual;
cs

실행 결과

 

substrb(char, pos, len)

문자열의 바이트(BYTE) 수만큼 잘라낸 결과를 반환.

1
2
3
4
5
6
select substrb('대한1a A!',0),substrb('대한1a A!',1),  --대한1a A!,대한1a A!
       substrb('대한1a A!',1,3),substrb('대한1a A!',-1,3), --대,!
       substrb('대한1a A!',4,7),substrb('대한1a A!',-3,3), --한1a A, A!
       LENGTH(substrb('대한1a A!',4,7)), --5
       LENGTH(substrb('대한1a A!',-3,3)) --3
from dual;
cs

참고) LENGTH(): 출력되는 문자의 길이

 

 

 

LTRIM(char, set) , RTILM(char, set) , TRIM()

LTRIM(char, set) : 매개변수로 들어온 char 문자열에서 set으로 지정된 문자열을

왼쪽 끝에서 제거한 수 나머지 문자열을 반환

RTRIM(char, set) : 매개변수로 들어온 char 문자열에서 set으로 지정된 문자열을

오른쪽 끝에서 제거한 수 나머지 문자열을 반환

TRIM() : 좌우의 공백 제거

1
2
3
select LTRIM('OracleceO','O'),RTRIM('OracleceO','O'),
       TRIM('  Oracle  ceO  ')
from dual;
cs

실행 결과

 

 

 

LPAD(exp1,n.expr2) , RPAD(exp1,n.expr2)

LPAD(exp1,n.expr2) : exp2문자열을 n자리만큼 왼쪽부터 채워 exprq을 반환하는 함수

RPAD(exp1,n.expr2) : exp2문자열을 n자리만큼 오른쪽부터 채워 exprq을 반환하는 함수

1
2
select LPAD('oracle!',10,'★'),RPAD('oracle!',10,'★')
from dual;
cs

실행 결과

 

 

INSTR(str, substr, pos, occur)

- str은 str문자열에서 substr과 일치하는 글자위치를 반환
pos는 시작 위치, 디폴트 값은 1 /  occur은 몇 번째 일치하는지 명시, 디폴트 값은 1

1
2
3
4
5
6
7
select INSTR('ALLEN','A'),
       INSTR('ALLEN','A',1,1),
       INSTR('ALLEN','L',1,1),
       INSTR('ALLEN','L',1,2),
       INSTR('ALLEN','L',2,1),
       INSTR('ALLEN','L',2,2)
from dual;
cs

실행 결과

INSTR('ALLEN','L',2,1) : 2번째 문자열 부터 L이 첫번째 나오는 위치 = 2

 

 

 

 

예>

1
2
3
4
5
6
7
8
9
10
11
12
13
--02)111-1234에서 지역번호 추출 => 출력결과 :
select substr('02)111-1234',1,2),
       substrb('02)111-1234',1,2),
       substr('02)111-1234',-11,2),
       SUBSTR(RTRIM('02)111-1234','111-1234'),1,2),
       LPAD('02)111-1234'2)
from dual;
 
 
--031)111-1234에서 지역번호 추출 => 출력결과 : 031
select substr('031)111-1234',1,3)
       LPAD('031)111-1234'3),
from dual;
cs
728x90