Oracle sql Function

3 분 소요

Function

문자열 함수

용도 사용
문자열 추출함수 SUBSTR(문자열, 시작위치, 길이)
문자열 덧셈함수 CONCAT(더할 문자열,더할 문자열)
문자열 트림 함수 TRIM(공백을 제거할 문자열)
문자열 소문자 또는 대문자( UPPER() )로 변경 LOWER() or UPPER()
문자열 대치 함수 REPLACE(문자열, 찾는 문자열, 대치할 문자열),TRANSLATE(문자열, 바뀔문자열, 바꿀문자열)
문자열 패딩 함수 L,RPAD(문자열,문자열길이(BYTE 단위), 남은길이에 채울 문자),
첫글자를 대문자로 바꾸는 함수 INITCAP(문자열)
문자열 검색 함수 INSTR(문자열, 검색문자열, 위치, 찾을 수)
문자열 길이를 얻는 함수 LENGTH()
  SELECT SUBSTR('HELLO', 1,3) FROM DUAL
  SELECT CONCAT('홍', '길동') FROM DUAL
  SELECT TRIM('   #   ') FROM DUAL
  SELECT * FROM MEMBER WHERE UPPER(ID) = UPPER('NEWID')
  SELECT RPAD(NAME,6,'_') FROM MEMBER;
  SELECT INITCAP('the important')FROM DUAL;
  SELECT INSTR('ALL WE NEED TO JUST IS TO', 'TO', 1, 2) FROM DUAL;
  SELECT LENGTH('HI') FROM DUAL;

숫자열 함수

용도 사용
절대값(양수)을 구하는 함수 ABS(n)
음수/양수를 알려주는 함수 SIGN(n)
숫자의 반올림값을 알려주는 함수 ROUND(n,반올림 위치)
숫자의 나머지값을 반환하는 함수 MOD(n1,n2)
숫자의 소숫점을 절삭
날짜형식의 날짜,시간 이후의 값을 절삭
TRUNC(숫자, 소숫점 절삭 위치)
TRUNC(날짜, 절삭위치)
숫자의 제곱을 구하는 함수
제곱근을 구하는 함수
POWER(n1,n2)
SQRT(25)
  SELECT ABS(-3),ABS(3) FROM DUAL;
  SELECT SIGN(35),SIGN(-35),SIGN(0)FROM DUAL;
  SELECT ROUND(34.4123 , 2), ROUND(34.5) FROM DUAL;
  SELECT TRUNC(TO_DATE('20201227041010','YYYYMMDDHH24MISS')) FROM DUAL;
  SELECT POWER(3,2), SQRT(9) FROM DUAL;

날짜 함수

용도 사용
현재 시간을 얻는 함수
SYSDATE
CURRENT_DATE
SYSTIMESTAMP
SURRENT_TIMESTAMP
날짜 추출 함수 EXTRACT(YEAR/MONTH/DAY/HOUR/MINUTE/SECOND FROM SYSDATE)
날짜를 누적하는 함수 ADD_MONTH(날짜,정수)
날짜의 차이를 알아내는 함수 MONTHS_BETWEEN(날짜, 날짜)
다음 요일을 알려주는 함수 NEXT_DAY(현재날짜, 다음요일)
월의 마지막 일자를 알려주는 함수 LAST_DAY(날짜)
  SELECT SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP FROM DUAL;
  SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;
  SELECT ADD_MONTHS(SYSDATE, -1) FROM DUAL;
  
  SELECT TRUNC(MONTHS_BETWEEN
       (SYSDATE,
        TO_DATE('01-01-2020','MM-DD-YYYY') ) ) "Months"
  FROM DUAL;
  SELECT NEXT_DAY(SYSDATE,'일') FROM DUAL;
  SELECT LAST_DAY(SYSDATE) FROM DUAL;

변환 함수

용도 사용
숫자를 문자로 바꾸는 함수
날짜를 문자열로 바꾸는 함수
TO_CHAR(NUMBER)
문자열을 날짜로 바꾸는 함수 TO_DATE()
문자열을 숫자로 바꾸는 함수 TO_NUMBER()
  -- '$' 는 앞에 $ 표시, ',' 는 천단위 구분자 표시, '.' 소수점 표시, '0' 빈자리를 채우는 문자
  SELECT TO_CHAR(12345, '$09,999,999,999.99') FROM DUAL;

NULL 관련 함수

용도 | 사용 반환 값이 NULL 일 경우에 대체 값을 제공하는 함수 | NVL(NULL, 대체값) NVL 에서 조건을 하나 더 확장한 함수 | NV2(NULL, NULL 이 아닌경우 연산, 대체값) 두값이 같은경우 NULL 그렇지않은경우 첫번째 값 반환 함수 | NULLIF(값1,값2) 조건에 따른 값 선택 | DECODE(기준값, 비교값, 출력값, 비교값, 출력값, 기본값)

  SELECT TRUNC(NVL(AGE, 0)/10)*10 FROM MEMBER;
  SELECT NVL2(AGE, TRUNC(AGE/10)*10,0) FROM MEMBER;
  SELECT NAME, NULLIF(AGE, 20) FROM MEMBER;
  SELECT DECODE(SUBSTR(NAME, 2,1), '길', NAME, '이', NAME, '그외') FROM MEMBER;

window function

  • 행과 행간의 관계를 쉽게 정의하기 위해 만든함수
  • 분석(ANALYTIC), 순위(RANK)함수라고 불림
  • 중첩해서는 사용이 불가능하나 서브쿼리에서 사용 가능

WINDOW FUNCTION 구조

  SELECT WINDOW_FUNCTION(ARGS) 
    OVER([PARTITION BY 컬럼명][ORDER BY 절][WINDOWING 절])
    FROM 테이블명;
  • WINDOW_FUNCTION : 함수명(SUM,MAX,MIN)
  • ARGS : 0~N개의 인자를 전달
  • OVER : 분석함수임을 표시(필수)
  • PARTITION : 대상을 그룹화할 기준
  • ORDER BY : 그룹에 대한 정렬 기준
  • WINDOWING 절 : 대상 행을 설정

순위 함수

용도 사용
동일한 값에 대해 같은 순위 부여 ROW_NUMBER() OVER(ORDER BY 컬럼)
동일한 값에 대해 같은 순위 부여, 동일한 순위를 하나의 건수로 취급 RANK() OVER(ORDER BY 컬럼)
동일한 값에 대해 다른순위 부여, 동일한 순위를 하나의 건수로 취급 DENSE_RANK() OVER([PARTITION BY 컬럼명] [ORDER BY 컬럼])
  SELECT ROW_NUMBER() OVER(ORDER BY AGE) 나이순, M.* FROM MEMBER M;
  SELECT RANK() OVER(ORDER BY AGE) 나이순, M.* FROM MEMBER M;
  SELECT DENSE_RANK() OVER(ORDER BY AGE) 나이순, M.* FROM MEMBER M;
  SELECT DENSE_RANK() OVER(PARTITION BY NAME ORDER BY AGE) 나이순, M.* FROM MEMBER M;

집계 함수

파티션별 윈도우의 합 SUM()
INLINE VIEW 로 파티션별 최대값을 가진 행 추출 MAX()
INLINE VIEW 로 파티션별 최소값을 가진 행 추출 MIN()
파티션별 ROWS 윈도우를 통해 평균값을 구함 AVG()
TRUE 값의 개수 구함 COUNT()
  SELECT SUM(AGE) OVER(PARTITION BY AGE) FROM MEMBER;
  SELECT MAX(AGE) OVER() FROM MEMBER;
  SELECT MIN(AGE) OVER() FROM MEMBER;
  SELECT AVG(AGE) OVER() FROM MEMBER;
  SELECT COUNT(AGE) OVER() FROM MEMBER;

순서 함수

가장 먼저나온값 출력,공동등수 인정 X,처음나온 행만 처리 FIRST_VALUE()
가장 나중에 나온 값 출력 LAST_VALUE ()
이전 몇번째 행까지의 값을 가져올 수 있음 LAG()
이후 몇번째 행의 값을 가져옴 LEAD()
  SELECT FIRST_VALUE(AGE) OVER(PARTITION BY NAME) FROM MEMBER;
  SELECT M.* ,LAST_VALUE(AGE) OVER(PARTITION BY NAME) FROM MEMBER M;
  SELECT LAG(AGE) OVER(ORDER BY AGE) FROM MEMBER M;
  SELECT LEAD(AGE) OVER(ORDER BY AGE) FROM MEMBER;

그룹 내 비율 함수

SUM() 에 대한 행별 컬럼값의 백분율을 소수점으로 구함 RATIO_TO_REPORT()
값이 아닌 행의 순서별 백분율을 구함 PERCENT_RANK()
전체건수에서 현재 행보다 작거나 같은 거수에 대한 누적백분율을 구함 CUME_DIST()
파티션 별 전체 건수를 ARGUMENT 값으로 N 등분한 결과를 구함 NTILE()
  SELECT RATIO_TO_REPORT(AGE) OVER() FROM MEMBER;
  SELECT PERCENT_RANK() OVER(ORDER BY AGE) FROM MEMBER;
  SELECT CUME_DIST() OVER(ORDER BY AGE) FROM MEMBER;
  SELECT NTILE(3) OVER(ORDER BY AGE) FROM MEMBER;

카테고리:

업데이트: