함수(FUNCTION) - 문자열 함수 2

jsbak·2020년 8월 28일
0

DB

목록 보기
20/35

2.CONCAT

CONCAT(c1,c2)
  • c1문자열과 c2문자열을 결합하여 반환
  • '||'연산자와 같은 기능
    예시)회원테이블에서 마일리지가 3000이상인 회원정보를 조회하시오.
    Alias는 회원명, 주민번호, 마일리지, 직업이다.
    단, 주민번호는 XXXXXX-XXXXXXX형식으로 출력하되 CONCAT을 사용할 것
 select mem_name as 회원명,
        concat(concat(mem_regno1,'-'),mem_regno2) as 주민번호,
        mem_mileage as 마일리지,
        mem_job as 직업
   from member
  where mem_mileage >= 3000;

3.SUBSTR

 SUBSTR(c, pos[, len])
  • 주어진 문자열 c에서 pos위치에서 len갯수 만큼의 문자열을 추출하여 반환
  • pos 값이 0인 경우 1로 취급
  • len이 생략되면 pos위치 이후의 모든 문자열을 반환
  • 가장 많이 사용되는 문자열 함수
    예시) 회원테이블에서 주민등록번호를 이용하여 여성회원들의 나이를 출력하시오.
    Alias는 회원명, 주민번호, 나이, 마일리지
 select mem_name as 회원명,
        mem_regno1||'-'||mem_regno2 as 주민번호,
        extract(year from sysdate) -
        --1900+to_number(substr(mem_regno1,1,2))
        to_number('19'||substr(mem_regno1,1,2)) as 나이,
        --extract ~(시간데이터중 추출할 것) from ~ (날자 타입의 값)추출 그 값은 숫자다.
        --to_타입(값) >> 값을 해당타입으로 변환
        mem_mileage as 마일리지
   from member
  where substr(mem_regno2,1,1) = '2';


문제]사원테이블에서 근속년수 15년 이상인 사원들에게 특별보너스를 지급하려한다.
보너스는 급여 * (근속년수/100)이며 소숫 첫자리에서 반올림한다.
지급액 = 급여 + 보너스
Alias는 사원명, 부서코드, 입사일, 근속년수, 보너스, 급여, 지급액이다.

select emp_name as 사원명,
       hire_date as 입사일,
       extract(year from sysdate) - extract(year from hire_date) as 근속년수,
       round( salary*(extract(year from sysdate) - extract(year from hire_date))/100 ) as 보너스,
       salary as 급여,
       salary + round( salary*(extract(year from sysdate) - extract(year from hire_date))/100 ) as 지급액
  from employees
 where extract(year from sysdate) - extract(year from hire_date) >= 15;
  -- 사칙연산 순서 고려하기!
  -- 문장이 길다면 분할정복하기!  
  -- select salary + round(salary*(extract(year from sysdate) - to_number(substr(to_char(hire_date),1,4)))/100) from employees

profile
끄적끄적 쓰는곳

0개의 댓글