13일차 - 240112

김리오·2024년 1월 15일

학원공부 TIL

목록 보기
13/13

📌LPAD / RPAD

  • 컬럼이나 대상 문자열을 명시된 자릿수에서 왼쪽 / 오른쪽에 나타내고, 남은 자리를 특정 기호로 채운다.
  • 반복문, if문 등에서 보기 좋게 정렬할 때 활용되기도 한다.
SELECT RPAD('Oracle', 20, '#')
from DUAL;


RPAD('ORACLE',20,'#')
----------------------------------------
Oracle##############

📌LTRIM / RTRIM / TRIM

  • 문자열의 왼쪽 / 오른쪽 / 전체에서 공백을 삭제한다.
SELECT LTRIM('   Oracle   ')
from DUAL;

LTRIM('ORACLE')
------------------
Oracle




SELECT RTRIM('   Oracle   ')
from DUAL;

RTRIM('ORACLE')
------------------
   Oracle
   
SELECT LENGTH('   Oracle   ')
from DUAL;

LENGTH('ORACLE')
----------------
              12

SELECT LENGTH(RTRIM('   Oracle   '))
from DUAL;

LENGTH(RTRIM('ORACLE'))
-----------------------
                      9

SELECT LENGTH(TRIM('   Oracle   '))
from DUAL;

LENGTH(TRIM('ORACLE'))
----------------------
                     6

📌REPLACE 함수

  • 첫 번째 인자인 문자열이나 컬럼에서 두 번째 인자 문자1을 세 번째 인자 문자2로 바꾸어 출력한다.
  • REPLACE(문자열/컬럼명, 문자1, 문자2)
SELECT 'abcde' as "문자열"
replace('abcde', 'ab', '**') as "replace"
from DUAL;

문자열     replace
---------- ----------
abcde      **cde
  • 내가 SQL 코드 작성할 때 흔히 하는 실수 중 하나는 SELECT 절에서 구분되는 컬럼에 , 를 쓰지 않는 것이다.
    아래 코드도 ename 컬럼과 REPLACE로 반환되는 컬럼이 구분되어 첫줄 마지막에 컴마를 붙여야 했다.
SELECT ename as "이름"
REPLACE (ename, SUBSTR(ename, 1, 2), '**' as "replace"
FROM emp;

SELECT ename as "이름",
REPLACE (ename, SUBSTR(ename, 1, 2), '**' as "replace"
FROM emp;

이름                 replace
-------------------- ----------
SMITH                **ITH
ALLEN                **LEN
WARD                 **RD
JONES                **NES
MARTIN               **RTIN
BLAKE                **AKE
CLARK                **ARK
SCOTT                **OTT
KING                 **NG
TURNER               **RNER
ADAMS                **AMS
JAMES                **MES
FORD                 **RD
MILLER               **LLER

📌SYSDATE 함수

  • 시스템에 저장된 현재 날짜를 반환하는 함수
  • 날짜 형 데이터는 연산 가능하다.
SELECT SYSDATE-1 어제,
SYSDATE 오늘,
SYSDATE+1 내일
FROM DUAL;

어제     오늘     내일
-------- -------- --------
24/01/15 24/01/16 24/01/17
  • EMP 데이터에서 각 사원들의 현재까지의 근무 일수 구하는 문제
SELECT ENAME,
TRUNC(SYSDATE-HIREDATE) || '일' as "근무일수"
from EMP;
COLUMN '근무일수' FORMAT A10
/

ENAME    근무일수
-------- ----------
SMITH    15735일
ALLEN    15670일
WARD     15668일
JONES    15629일
MARTIN   15450일
BLAKE    15600일
CLARK    15561일
SCOTT    13336일
KING     15400일
TURNER   15470일
ADAMS    13336일
JAMES    15384일
FORD     15384일
MILLER   15333일

📌형 변환 함수

📁TO_CHAR

  • 날짜형 / 숫자형을 문자형으로 변환한다.

  • TO_CHAR(날짜 데이터, '출력형식')

  • 종류의미
    YYYY연도 표현(4자리)
    YY연도 표현(2자리)
    YEAR단어로 된 연도(ex NINETEEN EIGHTY)
    MM월을 숫자로 표현
    MONTH단어로 된 달(ex NOVEMEMBER)
    MON월을 표현(ex APRIL)
    DAY요일 표현(ex SATURDAY, 토요일)
    DY요일을 약어로 표현(ex SAT, 토)
  • 2022년 11월 16일 수요일 오후 05:01:02
    이런 형식으로 현재 날짜와 시간을 출력하는 문장

    • 출력형식 안에 년, 월, 일 표현은 특수문자로 취급되므로 더블코트(" ") 안에 입력해야 한다.
SELECT TO_CHAR(SYSDATE, 'YYYY"년"MM"월"DD"일" DAY PM HH:MI:SS') "현재시간"
from DUAL;

현재시간
-----------------------------------
2024년01월18일 목요일 오전 08:37:39
  • 구분설명
    0자릿수를 나타내며 자릿수가 맞지 않을 경우 0을 채운다.
    9자릿수를 나타내며 자릿수가 맞지 않아도 채우지 않는다.
    L각 지역별 통화 기호를 앞에 표시한다.
    .소수점
    ,천 단위 자리 구분

📁TO_DATE

  • 문자형을 날짜형으로 변환한다.
  • TO_DATE( '문자' 또는 숫자, 'format')
  • 현재 날짜에서 2023/12/26 뺀 결과를 출력하는 문제
    • 입력한 2023/12/26 은 문자열로 인식한다. 이 문자열을 날짜형으로 변환해야 날짜 사이에 연산이 가능하다.
SELECT TRUNC(SYSDATE-TO_DATE('2023/12/26', 'YYYY/MM/DD'))||'일' as "경과일"
from DUAL;

경과일
----------
23일

📁TO_NUMBER

  • 특정 데이터를 숫자형으로 변환한다.
  • 숫자형으로 변환할 수 있는 형태만 변환 후 연산할 수 있다.
  • TO_NUMBER( 숫자형으로 변환할 수 있는 데이터, 'foramt')
SELECT TO_NUMBER('20,000', '99,999') - TO_NUMBER('10,000', '99,999')
from DUAL;

TO_NUMBER('20,000','99,999')-TO_NUMBER('10,000','99,999')
---------------------------------------------------------
                                                    10000

📌DECODE 함수

  • switch case 문과 같은 기능. 여러 가지 경우에 대해서 선택할 수 있도록 한다.
  • 컬럼명이 조건1과 같으면 결과1을 선택,
    컬럼명이 조건2와 같으면 결과2을 선택,
    컬럼명이 조건3과 같으면 결과3을 선택,
    아니면 기본결과를 선택한다.
DECODE (컬럼명, 조건1, 결과1,
			   조건2, 결과2,
               조건3, 결과3,
               기본결과n(생략 가능)
);

📌CASE 함수

  • 여러 가지 경우에 대해서 하나를 선택한다.
  • DECODE 함수는 조건이 일치하는 경우에 대해서만 적용되는 반면, CASE 함수는 다양한 비교 연산자를 이용하여 조건을 제시할 수 있으므로 범위를 지정할 수도 있다.
  • if else if else.. 와 유사한 구조를 갖는다.
CASE 표현식 WHEN 조건1 THEN 결과1
		   WHEN 조건2 THEN 결과2
           WHEN 조건3 THEN 결과3
           ELSE 결과n(생략가능)
END
profile
생각하는 사람이 되고 싶다

0개의 댓글