728x90
더보기
Day29. 230609
변환함수
서로 다른 유형의 데이터 타입으로 변환해 결과를 반환하는 함수
변환함수를 통해 형변환을 직접 처리 (명시적 형변환) 해줌,
참고)오라클이 자동으로 형변환 해주는 것 : 묵시적 형변환
to_char()
★문자형변환 함수 : 숫자 -> 문자, 날짜 -> 문자
숫자 변환 형식
숫자 포맷
1
2
3
|
select sal, sal*1300*2347890, to_char(sal*1300*230,'000,999,999,999,999')
from emp
order by sal desc;
|
cs |
날짜 변환 형식
날짜시간포맷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
select sysdate,
to_char(sysdate,'YYYY-MM-DD HH24:MI:SS DAY'),
to_char(sysdate,'YYY'),
to_char(sysdate,'YY'),
to_char(sysdate,'Y')
from dual;
select sysdate,
to_char(sysdate,'YYYY-MM-DD HH24:MI:SS DAY'),
to_char(sysdate,'MM'),
to_char(sysdate,'MONTH'),
to_char(sysdate,'MON')
from dual;
select sysdate,
to_char(sysdate,'YYYY-MM-DD HH24:MI:SS DAY'),
to_char(sysdate,'DD'), --09 일 -- 01-31로 표현
to_char(sysdate,'DDD'),--160 일 -- 001-365로 표현
to_char(sysdate,'D') --6 주중의 일을 1-7로 표현(일요일이 1)
from dual;
|
cs |
to_number()
숫자변환함수 : 문자 -> 숫자
문자나 다른 유형의 숫자를 NUMBER 형으로 변환하는 함수
1
2
3
|
select ename, deptno
from emp
where deptno='10'; --자동형변환
|
cs |
1
2
3
|
select ename, deptno
from emp
where deptno=to_number('10');
|
cs |
to_date()
날짜변환함수 : 문자 -> 날짜
1
2
|
select to_date('1980/01/01','RRRR/MM/DD')
from dual;
|
cs |
null관련함수
1
2
3
|
select ename, sal, comm, sal+comm
from emp
order by comm desc;
|
cs |
NVL(expr1,expr2) , nvl(expr,expr1,expr2)
nvl(expr,expr1) : null인 값을 expr1으로 반환. null아닌 값은 그 값 그대로.
nvl(expr,expr1,expr2) : null인 값을 expr2으로 반환. null아닌 값은 그 값은 expr1으로 반환.
1
2
3
|
select ename, sal, comm, nvl(comm,0), nvl2(comm,10,100), sal+nvl(comm,0)
from emp
order by comm desc;
|
cs |
nullif(expr1,expr2)
expr1과 expr2값이 동일하면 null을 반환. 그렇지않다면 expr1을 반환.
1
2
|
select sal,nullif(sal,1250)
from emp;
|
cs |
coalesce(expr1,expr2,...)
표현식이 아닌 1번째 표현식을 반환
1
2
|
select empno,sal,comm,
coalesce(comm,null,empno, sal) from emp;
|
cs |
기타함수
GREATEST(expr1,expr2,...), LEAST(expr1,expr2,...)
GREATEST : 매개변수로 들어오는 표현식에서 가장 큰 값을 반환
LEAST : 매개변수로 들어오는 표현식에서 가장 작은 값을 반환
1
2
3
|
select greatest(1,3,9,100,-1),least(1,3,9,100,-1),
greatest('김','이','박','최'),least('김','이','박','최')
from dual;
|
cs |
DECODE(expr,search1,result1,search2,result2,...,searchN,resultN,defalt)
expr과 search1을 비교해 두 값이 같으면 result1을
같지 않으면 serch2와 비교해 값이 같으면 result2를 반환,..
최종적으로 같은 값이 없으면 default값을 반환
부서번호가 10이면 'accounting'
20이면 'RESEARCH'
30이면 'SALES'
40이면 'OPERATINGS'
그 외 '기타'
1
2
3
4
5
6
7
8
|
select empno,ename,deptno,
DECODE(deptno,10,'accounting',
20,'RESEARCH',
30,'SALES',
40,'OPERATINGS',
'기타')
from emp
order by deptno asc;
|
cs |
CASE
CASE 표현식
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2 ..
WHEN 조건n THEN 값n
ELSE 기타값 END [AS] 컬럼별칭
1
2
3
4
5
6
7
8
9
|
select empno,ename,deptno,
CASE WHEN deptno=10 THEN 'accounting'
WHEN deptno=20 THEN 'RESEARCH'
--WHEN deptno=30 THEN 'SALES'
--WHEN deptno=40 THEN 'OPERATINGS'
ELSE '기타'
END AS 부서명
from emp
order by deptno asc;
|
cs |
1
2
3
4
5
6
7
8
9
|
select empno,ename,sal,
CASE WHEN sal<1000 THEN sal+(sal*0.8)
WHEN sal between 1001 and 2000 THEN sal+(sal*0.6)
WHEN sal between 2001 and 2050 THEN sal+(sal*0.4)
WHEN sal between 2051 and 3000 THEN sal+(sal*0.2)
ELSE sal+(sal*0.1)
END AS 이달급여
from emp
order by sal desc;
|
cs |
Table 생성
CREATE TABLE 테이블명{
컬럼명 타입(크기),
컬럼명 타입(크기)
};
1
2
3
4
5
6
7
8
9
10
11
12
|
-- TA1테이블생성
CREATE TABLE TA1(
tel varchar2(15)
);
-- 값 삽입
insert into TA1 values('02)111-1234');
insert into TA1 values('031)111-1234');
commit;
--TA1테이블 조회
select * from TA1;
|
cs |
728x90
'개발 수업 > DB' 카테고리의 다른 글
[Oracle/SQL] 서브쿼리 (0) | 2023.06.12 |
---|---|
[Oracle/SQL] JOIN(CROSS JOIN ,EQUI JOIN, NON EQUI JOIN,NATURAL JOIN,INNER JOIN,OUTER JOIN,SELF JOIN) (0) | 2023.06.12 |
[Oracle/SQL] SQL함수(날짜함수) (0) | 2023.06.09 |
[Oracle/SQL] SQL함수(숫자 함수, 문자 함수) (0) | 2023.06.09 |
[Oracle/SQL] 그룹쿼리와 집합연산자 (0) | 2023.06.08 |