function
- 오라클의 함수는 함수의 이름만 사용해서 호출하면 실행되고 결과가 출력되는 건 아닙니다.
- select 구문의 형식을 빌려서 select 와 from 사이에서 함수를 호출하고 from 뒤에는 함수실행의 임시테이블역할을 하는 dual 을 사용합니다
[1] 샘플 테이블인 dual 테이블 : 테이블이 대상이 아닌 연산을 하려고 할때 from 다음에 형식적으로 붙이는 실제로는 없는 테이블
select * from dual;
[2] 임시 데이터 출력 : 실제테이블 원본을 대상으로 한 연산이 아닌 단순 데이터 연산에는 아래와 같이 사용합니다
select 1234*1234 as 연산결과 from dual;
*** 문자열 처리 관련 함수 ***
-lower() : 모든 문자를 소문자로 변환
select lower('Hong Kil Dong') as "소문자" from dual;
-upper() : 모든 문자를 대문자로 변환
select upper('Hong Kil Dong') as "대문자" from dual;
-initcap() : 첫자만 대문자로 변환
select initcap('hong kil dong') as "첫글자만 대문자" from dual;
현재 사용되고 있고 사용될 모든 함수들는 괄호안에 쓴 입력값이 필드명일때 from 뒤에 테이블 이름을 사용하며,
연산의 대상은 괄호안에 쓰인 필드의 실제값이 됩니다
다만 위와 같이 select 와 from 사이에서 일반 데이터를 대상으로 하여 함수가 쓰인다면 from 뒤에 dual 이 쓰여지게 됩니다
select upper(ename) from emp;
select lower(job) from emp;
select initcap(job) from emp;
-> 함수 연산의 결과는 화면에 결과로 보여질 뿐 테이블 의 값을 변경하는 것은 아닙니다.
-> 함수 실행의 결과는... 일반데이터 연산은 결과가 한개 출력되지만, 테이블의 필드를 대상으로 하면 레코드 갯수만큼 출력됩니다.
- concat() : 문자열 연결
select concat('이젠 IT ', '아카데미') as 문자열연결 from dual;
select '이젠 IT ' || '아카데미' as 문자열연결 from dual;
- length() : 문자열의 길이
select length('이젠 아이티 아카데미') as 글자수, length('The ezen IT') as 글자수 from dual;
select ename, length(ename) from emp;
- substr() : 문자열 추출(데이터, 인덱스(1), 카운트)
select substr('홍길동 만세', 2, 4) from dual;
-substr 의 경우 자바의 substring 처럼 시작번째부터 끝번째+1 이 아니라 시작 번째 부터 글자수를 나타 냅니다.
- 위의 예경우 2번째 글자부터 네글자 표시(공백포함)
-> booklist 테이블에서 grade가 '18' 인 레코드의 도서제목에 '-18+' 이 글자를 붙여주세요....
update booklist set subject = concat( subject, '-18+' ) where grade='18';
-> booklist 테이블에서 grade가 '18' 인 레코드의 도서제목에서 '18+'를 '20+' 로 바꿔주세요
update booklist set subject = substr( subject, 1, length(subject)-3 ) where grade='18';
update booklist set subject = concat( subject , '20+' ) where grade='18';
update booklist set subject = concat( substr( subject, 1, length(subject)-3 ) , '20+' )
where grade='18';
-instr() : 포함되어 있는 문자열 시작 위치
select instr('홍길동 만세 동그라미', '동') from dual;
- '홍길동 만세 동그라미' 안에 '동' 이 몇번째 글자로 위치하는지 계산
- 여러개 포함한다면 첫번째 위치가 몇번째글자인지 계산
- lpad(), rpad() : 자리 채우기
select lpad('Oracle', 20, '#') from dual; -- ##############Oracle
select rpad('Oracle', 20, '*') from dual; -- Oracle**************
-trim() : 컬럼이나 대상 문자열에서 특정 문자가 첫번째 글자이거나
마지막 글자이면 잘라내고 남은 문자열만 반환.
select trim('a' from 'aaaOracleaaaaaaaa') as result from dual; --Oracle
select trim(' ' from ' Oracle ') as result from dual; --Oracle
*** 수식 처리 관련 함수 ***
-round() : 반올림(음수 : 소수점 이상 자리)
select round(12.3456, 3) from dual; -- 12.346
-> 12.3456 : 반올림하려는 대상 숫자 / 3 : 반올림하여 표시하고자하는 마지막 자리수
- 3 : 소수점 넷째자리에서 반올림하여 셋째자리까지 남김
- 2 : 소수점 셋째자리에서 반올림하여 둘째자리까지 남김
- 1 : 소수점 둘째자리에서 반올림하여 첫째자리까지 남김
- 0 : 소수점 첫째자리에서 반올림하여 소수점 자리수 없앰
- -1 : 1의 자리에서 반올림하여 10 자리까지 남김
- -2 : 10의 자리에서 반올림하여 100의 자리까지 남김
- -3 : 100의 자리에서 반올림하여 1000의 자리까지 남김
select round(1728.9382, 3) from dual; --1728.938
select round(1728.9382, 2) from dual; --1728.94
select round(1728.9382, 1) from dual; --1728.9
select round(1728.9382, 0) from dual; --1729
select round(1728.9382, -1) from dual; --1730
select round(1728.9382, -2) from dual; --1700
select round(1728.9382, -3) from dual; --2000
-abs() : 절대값
select abs(-10) from dual; --10
-floor() : 소수점 아래 절사 - 반올림 없음
select floor(12.94567) from dual; -- 12
-trunc() : 특정 자리 자르기 - 반올림 없음 , 3은 남기고 싶은 소수점 아래 자리수
select trunc(12.34567, 3) from dual; -- 12.345
-mod() : 나머지 -- 8 을 5로 나눈 나머지
select mod(8, 5) from dual; --3
*** 날짜 처리 관련 함수 ***
-sysdate : 날짜
select sysdate from dual; -- 오늘 날짜와 현재 시간
'OracleDataBase기초' 카테고리의 다른 글
OracleDataBase10 - Join (0) | 2022.06.12 |
---|---|
OracleDataBase09 - GroupFunction (0) | 2022.06.12 |
OracleDataBase07 - DML(Select) (0) | 2022.06.12 |
OracleDataBase06 - DML (0) | 2022.06.12 |
OracleDataBase05 - Sequence (0) | 2022.06.12 |