대소문자 변환 함수

UPPER : 전부 대문자

LOWER : 전부 소문자

INITCAP : 첫 번째 철자만 대문자

SELECT UPPER(ENAME), LOWER(ENAME), INITCAP(ENAME) FROM EMP;


SUBSTR

문자에서 특정 철자 추출

  • SUBSTR('단어', 시작 첨자, 시작 위치로부터 끝 첨자'

SELECT SUBSTR('SMITH', 1, 3) FROM DUAL;

  • SMITH 단어에서 첫 번째(1) 철자(s)부터 세 번째(3) 철자(I)까지의 문자열 추출

LENGTH

문자열의 길이 출력

SELECT ENAME, LENGTH(ENAME) FROM EMP;


INSTR

문자에서 특정 철자의 위치 출력

  • INSTR('단어', '출력할 철자')

SELECT INSTR('SMITH', 'M') FROM DUAL;


REPLACE

특정 철자를 다른 철자로 변경

SELECT ENAME, REPLACE(SAL, 0, '*') FROM EMP;

  • EMP 테이블에서 ENAME과 SAL 컬럼을 인출하는데 SAL에 있는 값들 중 '0'은 '*'로 변경

SELECT ENAME, REGEXP_REPLACE(SAL, '[0~3]', '*') AS SALARY FROM EMP;

  • 0~3 까지를 '*'로 변경

LPAD, RPAD

특정 철자를 N개 만큼 채우기
LPAD : 왼쪽부터
RPAD : 오른쪽부터

SELECT ENAME, LPAD(SAL, 10, '*') AS LPAD_SAL, RPAD(SAL, 10, '*') AS RPAD_SAL FROM EMP;


TRIM, RTRIM, LTRIM

특정 철자 잘라내기
TRIM : 원하는 철자
LTRIM : 왼쪽 철자
RTRIM : 오른쪽 철자

SELECT 'SMITH', LTRIM('SMITH', 'S'), RTRIM('SMITH', 'H'), TRIM('S' FROM 'SMITHS') FROM DUAL;


ROUND, TRUNC

ROUND : 반올림
TRUNC : 특정 자리의 숫자를 버리고 출력

SELECT '876.567' AS 숫자, ROUND(876.567,1) FROM DUAL;

SELECT '876.567' AS 숫자, TRUNC(876.567,1) FROM DUAL;


MOD, FLOOR

MOD: 나눈 나머지 값 출력
FLOOR : 몫

SELECT MOD(10, 3) FROM DUAL;

SELECT EMPNO, MOD(EMPNO, 2) FROM EMP;

  • 사원번호가 홀수면 1, 짝수면 0을 출력하는 쿼리

SELECT FLOOR(10/3) FROM DUAL;


MONTHS_BETWEEN

날짜 간 개월 수 출력

SELECT ENAME, MONTHS_BETWEEN(SYSDATE, HIREDATE) FROM EMP;

  • 입사한 날짜부터 오늘까지 총 몇달 근무했는지 출력하는 쿼리

SELECT TO_DATE('2019/06/01', 'RRRR-MM-DD') - TO_DATE('2018-10-01', 'RRRR-MM-DD') FROM DUAL;

  • 2018년 10월 1일에서 2019년 6월 1일 사이의 총 일수를 출력하는 쿼리
  • TO_DATE 함수는 연도, 월, 일을 RRRR-MM-DD라고 명시

ADD_MONTHS

개월 수 더한 날짜 출력

SELECT ADD_MONTHS(TO_DATE('2019-05-01', 'RRRR-MM-DD'),100) FROM DUAL;

  • 2019년 5월 1일부터 100달 뒤의 날짜 출력

SELECT TO_DATE('2019-05-01', 'RRRR-MM-DD') + 100 FROM DUAL;

  • 100일 뒤 날짜 출력

NEXT_DAY

특정 날짜 뒤에 오는 요일 날짜 출력

SELECT SYSDATE AS 오늘날짜, NEXT_DAY(SYSDATE, '월요일') FROM DUAL;

  • 오늘 날짜(2023-05-10)에서 바로 돌아오는 월요일의 날짜 출력

LAST_DAY

특정 날짜가 있는 달의 마지막 날짜 출력

SELECT '2019/05/22' AS 날짜, LAST_DAY('2019/05/22') AS "마지막 날짜" FROM DUAL;

  • 2019년 05월 22일 해당 달의 마지막 날짜 출력

SELECT LAST_DAY(SYSDATE) - SYSDATE AS "남은 날짜" FROM DUAL;

  • 2023-05-10 현재 기준 이번달 말일까지 총 며칠 남았는지 출력하는 쿼리


NVL, NVL2

NVL(전달값,변경값) : 전달값이 NULL인 경우 변경값으로 변환하여 반환하는 함수

NVL2(전달값,변경값1,변경값2) : 전달값이 NULL이 아닌 경우 변경값1로 변환하여 반환하고 NULL인 경우 변경값2으로 변환하여 반환하는 함수

SELECT ENAME, COMM, NVL(COMM,0) FROM EMP;

SELECT ENAME, SAL, COMM, NVL2(COMM, SAL+COMM, SAL) FROM EMP WHERE JOB IN ('SALESMAN', 'ANALYST');

  • COMM이 NULL이 아닌 사원들은 SAL+COMM을 출력하고, NULL인 사원들은 SAL을 출력

DECODE

전달값을 비교값과 차례대로 비교하여 같은 경우 변경값으로 변환하여 반환하는 함수
비교값이 모두 다른 경우 기본값으로 변환하여 반환
기본값이 생략된 경우 NULL 반환

SELECT ENAME, DEPTNO, DECODE(DEPTNO, 10, 300, 20, 400, 0) AS 보너스 FROM EMP;

  • 부서 번호가 10번이면 300,
    부서번호가 20번이면 400,
    부서 번호가 10, 20 둘 다 아니면 0으로 출력하는 쿼리

CASE

DECODE와 비슷한 SQL의 IF문

SELECT ENAME, JOB, SAL, CASE WHEN SAL >= 3000 THEN 500
                             WHEN SAL >= 2000 THEN 300
                             WHEN SAL >= 3000 THEN 500
                             ELSE 0 END AS BONUS
    FROM EMP;
    

  • 보너스가 월급이 3000 이상이면 500,
    2000 이상이고 3000보다 작으면 300,
    1000 이상이고 2000 보다 작으면 200,
    나머지는 0 을 출력

0개의 댓글

Powered by GraphCDN, the GraphQL CDN