기록을 합시다.
[SQL] ORACLE SQL 공부 -2- 본문
함수의 종류
SQL에서 함수는 데이터를 가공하거나 계산하는 데 사용된다. 함수의 종류는 다음과 같이 단일행, 다중행 함수로 나뉜다.
- 단일행 함수: 하나의 행을 입력 받아 하나의 행을 반환하는 함수
- 문자함수: 문자열을 처리하는 함수 (UPPER, LOWER, INITCAP, SUBSTR, LENGTH 등)
- 숫자함수: 숫자를 처리하는 함수 (ROUND, TRUNC, MOD 등)
- 날짜함수: 날짜와 시간을 처리하는 함수 (MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY 등)
- 변환함수: 데이터 타입을 변환하는 함수 (TO_NUMBER, TO_DATE, TO_CHAR 등)
- 일반함수: 그 외의 다양한 기능을 제공하는 함수 (NVL, DECODE, CASE 등)
- 다중행 함수: 여러 개의 행을 입력받아 하나의 행을 반환하는 함수
- 그룹함수: 여러 행을 그룹화하여 계산하는 함수 (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은 거의 문법보다는 함수로만 모든 것을 해결하는 느낌이 조금 강하다.
물론 알고리즘 문제 푸듯이 여러 함수를 중첩해서 쿼리를 만들 거라는 생각도 들었다...
뭐든지 쉬운 건 없는 듯..
'공부 > DB' 카테고리의 다른 글
ORA-29275 부분 다중 바이트 문자 오류 해결 (0) | 2023.10.19 |
---|---|
[SQL] ORACLE SQL 공부 -4- (2) | 2023.08.06 |
[SQL] ORACLE SQL 공부 -1- (0) | 2023.07.26 |
[docker] 팀원들이랑 사용할 oracle 도커 이미지 만들기 (1) | 2023.05.30 |
[Oracle] 데이터베이스 생성 및 계정 생성 (0) | 2023.04.25 |
Comments