본문 바로가기
Back-End/DB

[Oracle] 오라클 함수 (문자열, 숫자, 날짜)

by LeeGangEun 2022. 2. 28.

대 ·소문자 변환 , 문자열 갯수 -  UPPER,  LOWER,  INITCAP,  LENGTH

select ename,
	upper(ename), -- 대문자로 변환
        lower(ename), --소문자로 변환
	initcap(ename) -- 첫번째 글자만 대문자 나머진 소문자로 변환
        length(ename)  -- 문자열 갯수 출력
from emp;

 

 

문자열 일부 추출 -  SUBSTR

select job, substr(job,1,2) , substr(job,1)   -- SUBSTR(문자열데이터, 시작위치, 추출길이 입력) 
from emp;				-- 추출길이 생략시 시작위치부터 문자열 끝까지 출력한다.

 

 

특정 문자 위치 찾기 - INSTR

select instr('HELLO, ORACLE!',  'L',2,2),  instr('핫둘셋넷', '둘') from dual;

--특정 문자 위치 찾기 
-- 1. 대상 문자열 데이터(필수)
-- 2. 위치를 찾으려는 부분 문자(필수) == L
-- 3. 위치 찾기를 시작할 대상 문자열 데이터 위치 (선택, 기본값은 1)
-- 4. 시작 위치에서 찾으려는 문자가 몇 번째인지 지정(선택, 기본값은 1)


 

특정 문자 변환 - REPLACE

select '010-1234-5678' as replace_before,
    replace('010-1234-5678','-',' ') as replace_1,
    replace('010-1234-5678','-') as replace_2 
from dual;

-- REPLACE(문자열데이터 or 열 이름 , 찾는 문자, 대체할 문자)

 

 

빈 공간 채우기 - LPAD, RPAD

select 'Oracle',
lpad('Oracle', 10, '#') as lpad_1,   -- 왼쪽 빈공간 '#' 삽입         
rpad('Oracle', 10, '#') as rpad_1,   -- 오른쪽 빈공간 '#' 삽입
lpad('Oracle', 10) as lpad_2,        -- 왼쪽 빈공간 공백 삽입
rpad('Oracle', 10) as rpad_2         -- 오른쪽 빈공간 공백 삽입
from dual;

-- 첫번째 문자열 입력, 두번째 데이터의 자릿수, 마지막 빈공간을 채울 문자 ! (비우면 공백)

 

 

문자열 합치기 - CONCAT, OR 연산자

select concat(empno,ename),
    empno || ename
from emp;

-- 문자열 합치기 보통 concat 안쓰고 ||으로 씀 자바의 '+'연산자 느낌 ㅎㅎ

 

 

특정 문자 제거 - TRIM, LTRIM, RTRIM

SELECT '[' || TRIM('_' FROM '_ _Oracle_ _') || ']' AS TRIM,
       '[' || TRIM(LEADING '_' FROM '_ _Oracle_ _') || ']' AS TRIM_LEADING,
       '[' || TRIM(TRAILING '_' FROM '_ _Oracle_ _') || ']' AS TRIM_TRAILING,
       '[' || TRIM(BOTH '_' FROM '_ _Oracle_ _') || ']' AS TRIM_BOTH
  FROM DUAL;
  
  -- TRIM(삭제 옵션(선택), 삭제할 문자(선택), FROM 원본 문자열 데이터(필수))
  -- 삭제할 문자 생략시 공백제거



숫자 함수

select round(1234.5678,2),   -- 지정된 숫자의 특정 위치에서 반올림!   (첫번째: 값 입력), (두번째: 반올림할 위치)
       trunc(1234.5678,2),    -- 지정된 숫자의 특정위치에서 버림한다 ! (첫번째 : 값 입력), (두번째: 버림할 위치)
       ceil(3.14),   -- 4      -- 올림
       floor(3.14),  -- 3      -- 버림
       ceil(-3.14),  -- -3     
       floor(3.14),   -- -4    
       mod(15,6)     -- 나눗셈 될 숫자, 나눌 숫자   ==> 나머지 출력 
from dual;



현재 날짜 출력 -  SYSDATE

SELECT SYSDATE AS NOW,     -- 오늘 날짜
       SYSDATE-1 AS YESTERDAY,  -- 어제 날짜
       SYSDATE+1 AS TOMORROW   -- 내일 날짜
  FROM DUAL;


몇 개월 이후 날짜 구하기 -  ADD_MONTHS

select sysdate, add_months(sysdate,3)  -- 현재 날짜에 3개월 더한다.
from dual;

-- add_months(날짜 데이터(필수), 더할 개월 수 (정수),(필수))

 

 

두 날짜 간 개월 수 차이 구하기 -  MONTHS_BETWEEN

SELECT EMPNO, ENAME, HIREDATE, SYSDATE,
       MONTHS_BETWEEN(HIREDATE, SYSDATE) AS MONTHS1,  -- hiredate, sysdate 개월 수 차이
       MONTHS_BETWEEN(SYSDATE, HIREDATE) AS MONTHS2,  -- sysdate hiredate 개월 수 차이
       TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS MONTHS3  -- 소숫점까지 나오기때문에 정수로 출력!
FROM EMP;

-- round와 trunc 함수를 이용하는게 날짜 데이터에도 적용 가능