-
SQL 함수back-end&DB/SQL(Oracle) 2023. 5. 4. 12:17728x90
. 문자 함수
하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합
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 비교 연산하면 FALSENVL(검사데이터, 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