본문 바로가기
개발자 양성과정 필기노트/DB | ORACLE

단일행 함수

by jono 2021. 8. 25.

DB  ||  DAY8  ||  단일행 함수


*** 함수를 사용하는 경우, alias지정하는 것이 보기좋다.

 

 1. 문자함수 

1) 대소문자 변환함수

-> 해당 컬럼의 데이터를 대문자 / 소문자 / 카멜타입으로 변환하여 출력한다

  • LOWER(컬럼명)
  • UPPER(컬럼명)
  • INITCAP(컬럼명) -> 카멜타입으로 변환함.

 

2) 문자조작 함수

  • CONCAT( 컬럼명1 , 컬럼명2 )    : 컬럼1과 컬럼2의 데이터를 합친다.
  • INSTR( 컬럼명 , '문자' )    : 해당컬럼의 데이터에서 '문자'의 첫번째 위치를 출력함.
  • SUBSTR( 컬럼명 , n1 )    : 컬럼데이터의 n1번째 글자부터 끝까지 추출함.
  • SUBSTR( 컬럼명 , n1 , n2 )    : 컬럼데이터의 n1번째 글자부터 n2개의 문자를 추출함.
  • LENGTH(컬럼명)    : 컬럼의 데이터의 길이를 출력함.
  • LPAD( 컬럼명, n , 문자 ) | RPAD( 컬럼명, n , 문자 )   
    : 해당컬럼데이터가 n개가 되도록 빈 공간을 문자로 채운다.
    : L -> 왼쪽부터 / R -> 오른쪽부터 문자를 채움.
    : 결과적으로 LPAD == 오른쪽 정렬 , RPAD == 왼쪽 정렬의 효과를 가진다.
  • TRIM( '문자' FROM 컬럼명 )    : '문자'가 컬럼테이터의 맨앞/맨뒤에 있는 경우 삭제해준다.
  • REPLACE( 컬럼명, '문자1' , '문자2' )    : 컬럼의 데이터 중 '문자1'을 '문자2'로 변경하여 출력한다.

 2. 숫자함수 

  • ROUND( 숫자, 결과값의 자릿수 )    : 지정된 소숫점 자릿수로 값을 반올림한다.
  • TRUNC( 숫자, 결과값의 자릿수 )    : 지정된 소숫점자리로 값을 버림
  • MOD( 숫자, 나눌숫자 )    : 나눈 나머지를 반환함.

# sqlplus에서 숫자함수 이용하기

SELECT round(44.842, 2)
FROM dual ; //  결과 44.84

SELECT round( 88.564 , -2)
FROM  dual  ;  // 결과:100

 3. 날짜함수 

1) 날짜를 이용한 산술연산

select ( sysdate- hire_date ) / 7 as WEEKS
from employees;

 

2) 날짜 조작함수

  • MONTHS_BETWEEN( '날짜1', '날짜2' )    : 날짜1과 날짜2 사이의 개월차이를 반환함
  • ADD_MONTHS( '날짜', n )   : 해당 '날짜'의 n개월 후의 날짜를 반환함
  • NEXT_DAY( '날짜' , '요일' )    : 해당 '날짜' 다음에 처음으로 오늘 '요일'의 날짜를 반환함
  • LAST_DAY( '날짜' )    : 해당 날짜가 속해있는 달의 마지막 날을 반환함
  • ROUND( '날짜', 'MONTH' / 'YEAR' )    : 해당날짜를 반올림함.
                          MONTH -> 日에서 반올림함
                          YEAR ->月에서 반올림함
  • TRUNC( '날짜', 'MONTH' / 'YEAR' )    : 해당 날짜가 포함되어있는 날짜에서 버림을 함
                         MONTH -> 日을 버림하고, 1일로 출력
                         YEAR -> 해당 날짜 연도의 1월 1일을 출력함.

 


 4. 변환함수 

 

1) TO_CHAR ( date or number , 'format model' ) 

  • DATE -> CHAR  ( date, 'format model' )

 # format model 

요소 결과
YYYY 숫자로 된 전체 연도
YEAR 영어 철자로 표기된 연도
MM 월의 2자리값
MONTH 전체 월 이름
MON 월의 3자리 약어
DD 숫자 형식의 월간 일
DAY 요일의 전체 이름
DY 3문자로 된 요일 약어
HH 12시제
HH24 24시제
MI
SS

 # 숫자를 영문으로 출력하고싶다면, format뒤에 sp를 붙인다. (spelling의 약어.)

 # format 안에 문자열을 넣고싶다면, 큰따옴표로 결합시킨다. 

SELECT to_char( sysdate, 'yyyy/mm/dd/day "time: " hh24:mi' )
FROM dual ;

 

  • NUMBER -> CHAR  ( number, 'format model' ) 
SELECT to_char( salalry , '$999,999' ) as salary
FROM employess;

 

2) TO_NUMBER ( 컬럼명 , 'format model ' )

  • CHAR -> NUMBER 

연산을 해야하는 컬럼이 문자열로 지정되어있는경우, to_char함수를 사용하면 format model에 명시된 형식에서 숫자만 추출할 수 있다.

SELECT to_number( salary, '$999,999' ) * 12 as annual_salary
FROM employees;

 

3) TO_DATE ( 'nn-nn-nn' , 'format model' )

  • CHAR -> DATE

날짜가 표현된 문자열의 년/월/일이 구분되지않는 경우에 사용한다.

어떤 항목이 년/월/일에 해당하는지 지정하면, DD-MON-RR형식으로 출력한다.

SELECT employee_id, last_name, salary,hire_date
FROM employees
WHERE hire_date < to_date( '2004/08/09' , 'yyyy/mm/dd' ) ;

 5. 일반함수 

1) NVL( 인수1 , 인수2 )

  • 첫번째 인수를 검사함 - NULL이 아니면 첫번째인수를 반환함
                                 - NULL이면 두번째 인수를 반환함
  • NULL값을 실제 값으로 변환한다. 모든 데이터 유형을 사용할 수 있다.
  • 두 인수의 데이터타입은 일치해야한다.
NVL ( commission_pct , 0 )  -> commission_pct가 null인 경우 0을 출력함
NVL (job_id , 'No Job Yet' )  -> job_id가 null인 경우 'No Job Yet'을 출력함
SELECT  NVL( commission_pct , 0 ) , (salary*12) + NVL( (salary*12*commission_pct) , 0 ) as ANNUAL_SALARY
FROM   employees ;
// commission_pct컬럼은 NULL을 포함하는 데이터를 가지고 있으므로 연산을 할 때 오류가 발생한다.
따라서 NVL()함수를 사용하여 NULL인 데이터를 0으로 변환하면 연산오류를 없앨 수 있다.

 

2) NVL2( 인수1, 인수2, 인수3 )

  • 첫번째 인수를 검사함 - NULL이 아니면 첫번째 인수를 반환함
                                 - NULL이면 두번째 인수를 검사함 - NULL이 아니면 두번째인수를 반환함
                                                                             - NULL이면 세번째 인수를 반환함
SELECT NVL2(commission_pct , 'SAL+COMM' , 'SAL' );
FROM employees ;

3) NULLIF( 인수1, 인수2 )

  • 인수1 == 인수2 이면 NULL을 반환함
  • 인수1 != 인수2 이면 인수1을 반환함
SELECT NULLIF( length(first_name) , length(last_name) )
FROM employees ;

 

4) COALESCE( 인수1, 인수2, . . . 인수N )

  • NULL이 아닌 인수를 찾을때까지 인수를 검사하고, 처음으로 나온 실제값을 반환함.
  • NVL함수보다 여러 대체값을 가질 수 있다.
  • 모든 인수가 null이라면 마지막 인수가 출력될것임.
SELECT commission_pct, manager_id,
           COALESCE( to_char(commission_pct) , to_char(manager_id), 'No Commission No Manager'
FROM employees;

 

 

'개발자 양성과정 필기노트 > DB | ORACLE' 카테고리의 다른 글

SELF JOIN, 서브쿼리  (0) 2021.09.10
그룹함수 , GROUP BY절, HAVING절  (0) 2021.09.07
WHERE절 문법  (0) 2021.08.25
리눅스 터미널명령어  (0) 2021.08.11
리눅스 명령키  (0) 2021.08.09

댓글