ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 함수
    back-end&DB/SQL(Oracle) 2023. 5. 4. 12:17
    728x90

    . 문자 함수

    하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합

    ex) print(출력할 값) << 이런 형식이 함수

     

     

    내장함수

    오라클에서 기본적으로 제공하고 있는 함수

     

    1.1 문자함수

     

    - UPPER(데이터)

    데이터를 대문자로 변환

     

    - LOWER(데이터)

    데이터를 소문자로 변환

     

    ex) 이름과  이름(대문자), 메일과 메일(소문자)로 출력

    SELECT first_name, UPPER(first_name), email, LOWER (email)
    FROM employees;

     

     

    - LENGTH(데이터)

    문자열의 길이를 구하는 함수

     

    ex) 이름과 길이 8 이상인 직원만 출력

    SELECT first_name, LENGTH(first_name)
    FROM employees
    WHERE LENGTH(first_name) >= 8;

     

     

     

    - SUBSTR(데이터,시작위치,추출길이)

    문자열 추출하는 함수
    SUBSTR 데이터 시작위치 : 시작 위치부터 끝까지 추출
    SUBSTR 데이터 시작위치 추출길이 : 시작 위치부터 추출길이만큼 추출

    ex) JOB_ID에서 _기준으로 앞 뒤 따로 출력

    SELECT JOB_ID 
         , SUBSTR(JOB_ID,1,2) AS 앞
         , SUBSTR(JOB_ID,4) AS 뒤
           
    FROM employees;

    실습 입사일을 출력하시오 연도 월 일

    SELECT SUBSTR(hire_date,1,2) AS 연도
         , SUBSTR(hire_date,3,2) AS 월
         , SUBSTR(hire_date,6,2) AS 일   
    FROM employees;

    - REPLACE(데이터, 찾을 문자, 대체할 문자)

    문자열 대체하는 함수

    대체할 문자를 안 적는 경우 삭제로 처리

    SELECT hire_date
         , REPLACE(hire_date, '/', '-') as 하이픈
         , REPLACE(hire_date, '/') as 제거
         
    FROM employees;

     

    - CONCAT(데이터, 데이터)

    문자열 합치는 함수

    SELECT CONCAT('입사일은 ', hire_date)
    FROM employees;

    여기서 특이점.

    CONCAT(데이터, 데이터, 데이터)는 에러발생,

    ORA-00909: invalid number of arguments
    00909. 00000 -  "invalid number of arguments"

     

    함수가 3개 이상 문자열 합치는 것을 지원하지 않음

     

     

    해결방안.

    - || 문자열을 연결

    SELECT '입사일은 '|| hire_date || '입니다'
    FROM employees;

     

    - TRIM

    삭제할 문자가 없는 경우 공백 제거

     

    TRIM('문자열') 공백 삭제

    SELECT '[' || ' ' ||'공백' || ' ' || ']' as "공백 제거 전"
         , '[' || TRIM(' ' ||'공백' || ' ') || ']' as "공백 제거 후"
    FROM DUAL; -- SYS 더미테이블, TEST용으로 이용

    TRIM( 옵션 '제거할 문자' FROM '문자열') 문자 삭제

     

    - 삭제옵션

    LEADING 왼쪽

    TRAILING 오른쪽

    BOTH 양쪽글자

    SELECT '1문자1' as "문자 제거 전"
         , TRIM(LEADING '1' FROM '1문자1') as " 왼쪽 문자 제거"
         , TRIM(TRAILING '1' FROM '1문자1') as " 오른쪾 문자 제거"
         , TRIM(BOTH '1' FROM '1문자1') as " 양쪽 문자 제거"
         , TRIM(LEADING '1' FROM '111문자111') as " 왼쪽 문자 제거2"
         , TRIM(TRAILING '1' FROM '111문자111') as " 오른쪽 문자 제거2"
         , TRIM(BOTH '1' FROM '111문자111') as " 양쪽 문자 제거2"
         
    FROM DUAL;

     

     

     

    2. 숫자함수

     

    - MOD(나눗셈될 숫자, 나누고 싶은 숫자)

    나머지를 반환하는 함수

    SELECT MOD(15, 6)
    FROM DUAL;
    
    -- 결과값 3출력
    SELECT MOD(15, 2) AS 홀수
         , MOD(16, 2) AS 짝수
    FROM DUAL;
    
    -- 결과값 홀수 1 짝수 0

     

    - ROUND

    반올림하는 함수

     

    - TRUNC

    버림 함수

    SELECT ROUND(15.2468)
         , TRUNC(15.2468)
    FROM DUAL;
    
    -- 결과값 15 15 출력

    함수(숫자, 소수점자릿수)

    SELECT ROUND(15.2468,3)
         , TRUNC(15.2468, 3)
    FROM DUAL;
    
    -- 결과값 15.247 15.246 출력

     

    3. 날짜함수

     

    - SYSDATE

    오라클 DB에 있는 OS의 현재 날짜와 시간

    SELECT SYSDATE
    FROM DUAL;
    
    -- 현재 날짜와 시간 표시

     * 도구 > 환경설정 > 데이터베이스 > NLS에서 날짜형식 YYYY/MM/DD HH24:MI:SS 변경을 해야 출력이 됩니다.

     

    각각 하루, 1시간, 1분, 1초 추가가 가능합니다.

    SELECT SYSDATE as 현재
         , SYSDATE + 1 as 하루더함
         , SYSDATE + 1/24 as 한시간더함
         , SYSDATE + 1/24/60 as 일분더함
         , SYSDATE + 1/24/60/60 as 일초더함
    FROM DUAL;

     

     

    - ADD_MONTHS

    몇 개월 이후 날짜를 구하는 함수

    SELECT SYSDATE as 현재
         , ADD_MONTHS(SYSDATE, 1) as "1개월 후"
         , ADD_MONTHS(SYSDATE, -1) as "1개월 전"
    FROM DUAL;

     

    4. 형변환 함수

     

    - TO CHAR

    문자 데이터로 변환

    SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD/DAY')
    FROM DUAL;
    
    -- 출력값 2023/05/04/목요일

     

    - TO_NUMBER

    숫자로 변환

    SELECT TO_NUMBER('1')+1
    FROM DUAL;

    * 단 숫자만 가능 NUMBER('100원')의 경우 오류 발생

     

    - TO_DATE

    날짜로 변환

     

    - 암시적 형변환

    자동으로 형변환을 한다.

    SELECT '1'+1
    FROM DUAL;
    
    -- 출력값 2

     

    5. NULL 함수

    NULL에 산술 연산 을 하면 NULL
    NULL 비교 연산하면 FALSE

    NVL(검사데이터, NULL일 때)
    NVL(검사데이터, NULL 아닐 때, NULL일 때)

     

    SELECT FIRST_NAME
         , NVL(FIRST_NAME, '이름없음')
    FROM employees;
    
    -- 직원 이름이 NULL의 경우 이름없음 출력
    SELECT FIRST_NAME
         , NVL2(FIRST_NAME, '이름있음','이름없음')
    FROM employees;
    
    -- 직원의 이름이 있는 경우 이름 있음, NULL 경우 이름 없음 출력

     

    실습

    커미션이 NULL 일떄 0으로 대체하서 출력

    SELECT NVL(commission_pct, '0')
    FROM employees;

    매니저가 있는 직원은 직원으로 매니저가 업슨 직원은 관리자로 출력

    SELECT manager_id
         , NVL2(manager_id, '직원', '관리자')
    FROM employees;

     

    6. DECODE (검사대상, 비교값 1, 일치 시 반환될 값,... , 일치하지 않을 때 반환할 값)

     

    부서에 점수에 따라서 급여 인상률을 변경해서 급여 출력

    SELECT DEPARTMENT_ID, SALARY
         , DECODE(DEPARTMENT_ID
         , 100, SALARY*2
         , 90, SALARY*1.9
         , 80, SALARY*1.8
         , SALARY) as UPSALARY
    FROM employees;

     

    7. 그룹함수

    - sum : 합
    - count : 개수
    - min : 최소값
    - max : 최대값
    - ave : 평균

    -- 급여의 총합
    SELECT SUM(SALARY)
    FROM EMPLOYEES;
    SELECT min(SALARY) 
    FROM EMPLOYEES; -- 급여 최소값
    
    SELECT max(SALARY)
    FROM EMPLOYEES; -- 급여 최대값
    
    SELECT AVG(SALARY)
    FROM EMPLOYEES; -- 급여 평균

     

    8. ORDER BY 함수

    - 오름차순 ASC
    - 내림차순 DESC
    - ORDER BY정렬한 칼럼, 옵션(오름, 내림)

    SELECT department_id
    FROM employees
    ORDER BY department_id ASC;

    728x90

    'back-end&DB > SQL(Oracle)' 카테고리의 다른 글

    SQL CREATE와 ALTER 그리고 제약 조건  (0) 2023.05.10
    SQL JOIN  (0) 2023.05.09
    SQL GROUP BY와 HAVING와 ORDER BY  (0) 2023.05.08
    SQL WHERE절과 연산자  (0) 2023.05.03
    SQL SELECT절과 FROM절  (0) 2023.05.02
Designed by Tistory.