02-08 08:44
Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
관리 메뉴

기록을 합시다.

[SQL] ORACLE SQL 공부 -2- 본문

공부/DB

[SQL] ORACLE SQL 공부 -2-

울집고양이세마리 2023. 7. 29. 22:57

함수의 종류

SQL에서 함수는 데이터를 가공하거나 계산하는 데 사용된다. 함수의 종류는 다음과 같이 단일행, 다중행 함수로 나뉜다.

  1. 단일행 함수: 하나의 행을 입력 받아 하나의 행을 반환하는 함수
    • 문자함수: 문자열을 처리하는 함수 (UPPER, LOWER, INITCAP, SUBSTR, LENGTH 등)
    • 숫자함수: 숫자를 처리하는 함수 (ROUND, TRUNC, MOD 등)
    • 날짜함수: 날짜와 시간을 처리하는 함수 (MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY 등)
    • 변환함수: 데이터 타입을 변환하는 함수 (TO_NUMBER, TO_DATE, TO_CHAR 등)
    • 일반함수: 그 외의 다양한 기능을 제공하는 함수 (NVL, DECODE, CASE 등)
  2. 다중행 함수: 여러 개의 행을 입력받아 하나의 행을 반환하는 함수
    • 그룹함수: 여러 행을 그룹화하여 계산하는 함수 (SUM, AVG, COUNT, MAX, MIN 등)

대소문자 변환 함수 (UPPER, LOWER, INITCAP)

  • UPPER(문자열): 문자열의 모든 문자를 대문자로 변환
  • LOWER(문자열): 문자열의 모든 문자를 소문자로 변환
  • INITCAP(문자열): 문자열의 첫 번째 문자를 대문자로, 나머지 문자를 소문자로 변환
SELECT UPPER(ename), LOWER(ename), INITCAP(ename)
    FROM emp;
UPPER(ENAM LOWER(ENAM INITCAP(EN
---------- ---------- ----------
SCOTT      scott      Scott     
ADAMS      adams      Adams     
MILLER     miller     Miller

문자에서 특정 철자 추출 함수 (SUBSTR)

  • SUBSTR(문자열, 시작위치, 길이): 문자열에서 특정 위치와 길이의 문자를 추출
  • SUBSTR(문자열, 시작위치): 시작 위치부터 문자열 끝까지 추출
SELECT SUBSTR('SMITH', 1, 3)
    FROM DUAL;
SUB
---
SMI
SELECT SUBSTR('SMITH', 2)
    FROM DUAL;
SUBS
----
MITH

문자열 길이 출력 (LENGTH)

  • LENGTH(문자열): 문자열의 길이를 반환
SELECT ename, LENGTH(ename)
    FROM emp;
ENAME      LENGTH(ENAME)
---------- -------------
SCOTT                  5
ADAMS                  5
MILLER                 6

특정 철자 위치 (INSTR)

  • INSTR(문자열, 찾을 문자열): 문자열에서 특정 문자열이 처음으로 나타나는 위치를 반환
SELECT INSTR('SMITH', 'M')
    FROM DUAL;
INSTR('SMITH','M')
------------------
                 2

특정 철자부터 출력하기

  • SUBSTR(문자열, INSTR(문자열, 찾을 문자열)+1): 특정 문자열 이후의 문자열을 출력
SELECT SUBSTR('abcdefgh@naver.com', INSTR('abcdefgh@naver.com', '@')+1)
    FROM DUAL;
SUBSTR('A
---------
naver.com

특정 문자를 다른 문자로 변경 (REPLACE)

  • REPLACE(문자열, 찾을 문자열, 변경할 문자열): 문자열에서 특정 문자열을 찾아서 다른 문자열로 변경
SELECT ename, REPLACE(sal, 0, '*')
    FROM emp;
ENAME      REPLACE(SAL,0,'*')                      
---------- ----------------------------------------
SCOTT      3***                                    
ADAMS      11**                                    
MILLER     13**

특정 철자를 N개 만큼 채우기

  • LPAD(문자열, 전체 자릿수, 채울 문자): 문자열을 왼쪽에 채울 문자로 지정한 자릿수만큼 채움
  • RPAD(문자열, 전체 자릿수, 채울 문자): 문자열을 오른쪽에 채울 문자로 지정한 자릿수만큼 채움
SELECT ename, LPAD(sal, 10, '*') as salary1, RPAD(sal, 10, '*') as salary2
    FROM emp;
ENAME      SALARY1    SALARY2   
---------- ---------- ----------
KING       ******5000 5000******
BLAKE      ******2850 2850******
CLARK      ******2450 2450******
JONES      ******2975 2975******
MARTIN     ******1250 1250******
ALLEN      ******1600 1600******
TURNER     ******1500 1500******
JAMES      *******950 950*******
WARD       ******1250 1250******
FORD       ******3000 3000******
SMITH      *******800 800*******

ENAME      SALARY1    SALARY2   
---------- ---------- ----------
SCOTT      ******3000 3000******
ADAMS      ******1100 1100******
MILLER     ******1300 1300******

특정 철자 잘라내기 (TRIM, RTRIM, LTRIM)

  • TRIM(삭제할 문자 FROM 문자열): 문자열의 앞뒤에서 삭제할 문자를 제거합니다.
  • RTRIM(삭제할 문자 FROM 문자열): 문자열의 뒤에서 삭제할 문자를 제거합니다.
  • LTRIM(삭제할 문자 FROM 문자열): 문자열의 앞에서 삭제할 문자를 제거합니다.
SELECT 'smith', LTRIM('smith', 's'), RTRIM('smith', 'h'), TRIM('s' from 'smiths')
    FROM dual;
'SMIT LTRI RTRI TRIM
----- ---- ---- ----
smith mith smit mith

반올림해서 출력하기 (ROUND)

  • ROUND(숫자, 자릿수): 숫자를 지정한 자릿수로 반올림하여 출력합니다.
SELECT '876.567' as "숫자", ROUND(876.567, 1)
    FROM dual;
숫자      ROUND(876.567,1)
------- ----------------
876.567            876.6

숫자를 버리고 출력하기 (TRUNC)

  • TRUNC(숫자, 자릿수): 숫자를 지정한 자릿수에서 버리고 출력합니다.
SELECT '876.567' as "숫자", TRUNC(876.567,1)
    FROM dual;
숫자      TRUNC(876.567,1)
------- ----------------
876.567            876.5

나눈 나머지 값 출력하기 (MOD)

  • MOD(나눌 숫자, 나누는 숫자): 나눌 숫자를 나누는 숫자로 나눈 나머지 값을 출력
SELECT MOD(10,3)
    FROM dual;
MOD(10,3)
----------
         1

날짜 간 개월 수 출력하기 (MONTHS_BETWEEN)

  • MONTHS_BETWEEN(날짜1, 날짜2): 두 날짜 사이의 개월 수를 계산하여 출력
SELECT ename, MONTHS_BETWEEN(sysdate, hiredate)
    FROM emp;
ENAME      MONTHS_BETWEEN(SYSDATE,HIREDATE)
---------- --------------------------------
SCOTT                            487.188258
ADAMS                            486.414064
MILLER                           498.543096
...

함수들 은근 많다 .. ㄱ= 이것들 말고도 더 있어서 다음 포스팅에서도 함수에 관해 포스팅 할 듯.. 

그런데 SQL은 거의 문법보다는 함수로만 모든 것을 해결하는 느낌이 조금 강하다. 

물론 알고리즘 문제 푸듯이 여러 함수를 중첩해서 쿼리를 만들 거라는 생각도 들었다...

뭐든지 쉬운 건 없는 듯.. 

Comments