OracleDataBase기초

OracleDataBase08 - Function

본이qq 2022. 6. 12. 12:42

 

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