05장 SQL 주요 함수 (숫자 함수, 문자 함수)
오늘은 지난 시간의 SELECT로 특정 데이터를 추출하기에 이어서 SQL의 주요 함수에 대해 소개하는 시간을 갖겠습니다.
#DATABASE
#Oracle SQL
우선 만들어진 표의 이름은 EMP이며, 정보는 다음과 같습니다.
✔ SQL 주요 함수
제가 만든 EMP와 비슷한 테이블인데 SQL안에는 DUAL이라는 테이블이 있습니다.
DUAL 테이블은 산술 연산의 결과를 한 줄로 얻기 위해서 오라클에서 제공하는 테이블이며,
DUAL 테이블은 DUMMY라는 단 하나의 칼럼에 X라는 단 하나의 로우만을 저장하고 있으나 이 값은 아무런 의미가 없습니다.
기본적으로 DUMMY가 생성되어 있습니다.
이렇게 DUAL 테이블을 통해 산술 연산의 결과를 한줄로 얻을 수 있습니다.
✔ SQL 주요 함수
1. 숫자 함수
주로 사용하는 함수는 하이라이트 되어있습니다.
예시)
*ABS - 절댓값을 구합니다.
예시)
*FLOOR- 소수점 아래 버립니다.
예시)
*ROUND - 반올림 합니다.
예시)
*TRUNK- 특정 자릿수 버립니다.
예시)
*MOD- 입력받은 수를 나눈 나머지 값을 반환합니다.
✔ SQL 주요 함수
2. 문자 함수
no | 함수 | 내용 | 예시 |
1 | UPPER | 모두 대문자로 변경합니다. | SELECT 'Welcome to Oracle', UPPER('Welcome to Oracle') FROM DUAL; |
2 | LOWER | 모두 소문자로 변경합니다. | SELECT 'Welcome to Oracle', LOWER('Welcome to Oracle') FROM DUAL; |
3 | INITCAP | 문자열의 이니셜만 대문자로 변경합니다. | SELECT 'WELCOME TO ORACLE', INITCAP('WELCOME TO ORACLE') FROM DUAL; |
4 | LENGTH | 컬럼에 저장된 데이터 값이 몇 개의 문자로 구성되었는지 길이를 알려주는 함수이다. | SELECT LENGTH('Oracle'), LENGTH('오라클') FROM DUAL; |
5 | LENGTHB | 바이트 수를 알려주는 함수입니다. 특히, 한글 1자는 2바이트를 차지하기 때문에 수행 결과를 보면 한글 3자로 구성된 '오라클'의 LENGTHB 함수의 결과는 9가 됩니다. |
SELECT LENGTHB('Oracle'), LENGTHB('오라클') FROM DUAL; |
6 | SUBSTR / SUBSTRB | SUBSTR 과 SUBSTRB 함수는 대상 문자열이나 칼럼의 자료에서 시작위치부터 선택 개수만큼의 문자를 추출합니다. SUBSTRB 함수도 같은 형식이지만 명시된 개수만큼의 문자가 아닌 바이트 수를 잘라낸다는 점에서만 차이가 있습니다. |
SELECT SUBSTR('Welcome to Oracle',4.3) FROM DUAL; |
7 | INSTR | 대상 문자열이나 칼럼에서 특정 문자가 나타나는 위치를 알려줍니다. | SELECT INSTR('WELCOME TO ORACLE', 'O') FROM DUAL; |
8 | INSTRB | 바이트로 문자의 위치를 알아냅니다. | SELECT INSTR('데이터베이스', '이', 3, 1), INSTRB('데이터베이스', '이', 3, 1) FROM DUAL; |
9 | LPAD / RPAD | 칼럼이나 대상 문자열을 명시된 자릿수에서 오른쪽에 나타내고, 남은 왼쪽 자리를 특정 기호로 채웁니다. RPAD(RIGHT PADDING) 함수는 반대로 칼럼이나 대상 문자열을 명시된 자릿수에서 왼쪽에 나타내고, 남은 오른쪽 자리를 특정 기호로 채웁니다. |
SELECT LPAD('Oracle', 20, '#') FROM DUAL; SELECT RPAD('Oracle', 20, '#') FROM DUAL; |
10 | LTRIM / RTRIM | LTRIM 함수는 문자열의 왼쪽(앞)의 공백 문자들을 삭제합니다. RTRIM 함수 역시 오른쪽(뒤)의 공백 문자를 잘라냅니다. |
SELECT LTRIM(' Oracle ') FROM DUAL; SELECT RTRIM(' Oracle ') FROM DUAL; |
11 | TRIM | 칼럼이나 대상 문자열에서 특정 문자가 첫 번째 글자이거나 마지막 글자이면 잘라내고 남은 문자열만 반환합니다. | SELECT TRIM('a' FROM 'aaaaOracleaaaa') FROM DUAL; |
12 | REPLACE | REPLACE()는 문자열을 치환하는 함수입니다. 예를 들어 담당자의 실수로 도서의 제목을 잘못 입력한 경우 REPLACE 함수를 사용하면 일일이 변경하지 않고 한꺼번에 변경할 수 있습니다. |
CONN MADANG/MADANG; SELECT BOOKID, REPLACE(BOOKNAME,'야구','농구') BOOKNAME, PUBLISHER, PRICE FROM BOOK; |
< 문자 함수 예시 >
✔ SQL 주요 함수
3. 날짜 함수
no | 함수 | 내용 | 예시 |
1 | SYSDATE | SYSDATE 함수는 시스템에 저장된 현재 날짜를 반환하는 함수입니다. | SELECT SYSDATE FROM DUAL; |
2 | ROUND | 숫자 이외에 날짜에 대해서도 반올림을 할 수 있습니다. | SELECT HIREDATE, ROUND(HIREDATE, 'MONTH') FROM EMP; |
3 | TRUNC | 숫자를 잘라내는 것뿐만 아니라 날짜를 잘라낼 수 있습니다. ROUND 함수와 마찬가지로 포맷 형식을 주어 다양한 기준으로 날짜를 잘라낼 수 있습니다. |
SELECT HIREDATE, TRUNC(HIREDATE, 'MONTH') FROM EMP; |
4 | MONTHS_BETWEEN | 날짜와 날짜 사이의 개월 수를 구하는 함수 | SELECT ENAME, SYSDATE, HIREDATE, MONTHS_BETWEEN (SYSDATE, HIREDATE) FROM EMP; |
5 | ADD_MONTHS | ADD_MONTHS 함수는 특정 개월 수를 더한 날짜를 구하는 함수 | SELECT ENAME, HIREDATE, ADD_MONTHS(HIREDATE, 6) FROM EMP; |
6 | NEXT_DAY | NEXT_DAY 함수는 해당 날짜를 기준으로 최초로 도래하는 요일에 해당되는 날짜를 반환하는 함수 | SELECT SYSDATE, NEXT_DAY(SYSDATE, '수요일') FROM DUAL; |
7 | LAST_DAY | LAST_DAY 함수는 해당 날짜가 속한 달의 마지막 날짜를 반환하는 함수 | SELECT HIREDATE, LAST_DAY(HIREDATE) FROM EMP; |
< 날짜 연산자 예시 >
✔ SQL 주요 함수
4. 형 변환 함수
no | 함수 | 내용 | 예시 |
1 | TO_CHAR | (1) 날짜형을 문자형으로 변환하기 (2) 숫자형을 문자형으로 변환하기 |
--1) 날짜형을 문자형으로 반환하기 : TO_CHAR SELECT SYSDATE, TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL; --2) 숫자형에서 문자형으로 변환하기 : TO_CHAR SELECT TO_CHAR(12345,'0000000'), TO_CHAR(123456,'999,999,999')FROM DUAL; |
2 | TO_DATE | 날짜 형은 세기, 년도, 월, 일. 시간, 분. 초와 같이 날짜와 시간에 대한 정보를 저장 TO_DATE 함수는 문자열을 날짜 형으로 변환 |
3) NUMBER->DATE SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE=TO_DATE(19810220,'YYYYMMDD'); -->숫자를 날짜 데이터 객체로 변환 4) CHAR-> DATE SELECT TRUNC(SYSDATE-TO_DATE('2022/11/02','YYYY/MM/DD')) FROM DUAL; -->오늘에서 2022/11/02 사이에 몇일이 지났는지 알아내기! |
3 | TO_NUMBER | 특정 데이터를 숫자형으로 변환 | 5) 숫자형으로 변환:TO_NUMBER --> CHAR-> NUMBER SELECT TO_NUMBER('20,000','99,999') - TO_NUMBER('10,000','99,999') FROM DUAL; |
4 | NVL | NULL을 0 또는 다른 값으로 변환하기 위해서 사용 | SELECT ENAME, SAL, COMM, SAL*12+COMM, NVL(COMM, 0), SAL*12+NVL(COMM, 0) FROM EMP ORDER BY JOB; SELECT NVL(TO_CHAR(MGR),'다른값') FROM EMP; |
5 | DECODE | switch case 문과 같은 기능을 갖는다. 즉, 여러 가지 경우에 대해서 선택할 수 있도록 합니다. | DECODE (표현식, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3, 기본결과n ) |
6 | CASE | 프로그램 언어의 if else if else 와 유사한 구조를 가지고 있습니다. | CASE 표현식 WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 WHEN 조건3 THEN 결과3 ELSE 결과n END |
SQL에서는 형 변환 함수가 중요합니다.
서로 타입이 다른 데이터 형으로 변환해야 하는 경우가 자주 있기 때문에
위에 표를 보고 하나씩 예제를 살펴보도록 하겠습니다.
->앞에 아무런 숫자도 없으면 0으로 채웁니다.
-> 변환과 동시에 해당되는 년도의 사람을 찾았습니다.
->SYSDATE에서 희망하는 날짜의 문자열을 뺸것입니다.
[ 확인 문제 ]
5-1 사원 테이블(EMP)에서 입사일(HIREDATE)을 4자리 연도로 출력되도록 SQL문을 작성하세요? (ex. 1980/01/01)
5-2. 사원 테이블(EMP)에서 MGR칼럼의 값이 null 인 데이터의 MGR의 값을 CEO로 출력하는 SQL문을 작성하세요?
방법 1)
방법 2)
지금까지 SQL의 주요 함수에 대해서 알아보았습니다.
수정사항이나 궁금하신 점은 댓글 부탁드립니다.
감사합니다~!