-
[DB] SQL 숫자, 날짜, 문자 함수Database/SQL (oracle, mysql) 2019. 5. 24. 17:23
SQL의 숫자, 날짜, 문자 함수
ROUND -- 반올림(4사5입)
select round(45.573 , 2) from dual; -- 나는 소수점 2자리까지만 반올림 하겠소
TRUNC -- 소숫점 이하 버림
SELECT TRUNC(45.56) FROM DUAL; -- 다버림
SELECT TRUNC(45.56, 2) FROM DUAL; -- 소수점 아래 2자리만 남기고 다버림
FLOOR -- 소숫점 이하 버림 ( 실수 --> 정수 )
SELECT TRUNC(45.56) FROM DUAL; -- 다버림
하지만, TRUNC와는 달리 소수점 아래 자리 지정 안됨.
/ -- 나누기
10/3 = 3.33333 (정수, 실수를 생각하지 않는다.)
MOD -- 나머지 구하기
10/3 = 1
UPPER -- 대문자
문자처리 함수는 String클래스의 메소드와 유사하다.
SELECT UPPER ('Welcome to oracle') from dual;
LOWER -- 소문자
INITCAP -- 첫글자를 대문자로 바꿔라 ( 공백기준)
SELECT INITCAP( ' welcome to oracle ' ) from dual;
LENGTH -- 문자열길이
SELECT LENGTH('OracleSQL') from dual;
LENGTHB -- 문자열 길이를 바이트 단위로 구해라
SELECT LENGTHB('나길동') from dual; -- 9 출력 한글 한글자당 3바이트
INSTR -- 특정문자 위치 얻어와라 (비슷한 예. JAVA의 indexOf('a') )
INSTR(기준데이터, 특정문자)
INSTR(기준데이터, 특정문자, 시작인덱스, 출현 횟수)
SUBSTR -- 부분 문자열 얻기
SUBSTR( 기준문자열, 시작인덱스, 부분문자열 갯수)
LPAD -- 오른쪽 정렬 후 왼쪽 공백에 특정문자 채우기
LPAD(기준문자, 전체 길이, 채울문자)
LPAD -- 왼쪽 정렬 후 왼쪽 공백에 특정문자 채우기)
LTRIM, RTRIM, TRIM -- 연속된 공백 지우기
연속된 공백 외에도 특정 문자를 제거해 줄 수 있다.
TRIM( '문자열' )
SYSDATE -- 현재 날짜
MONTHS_BETWEEN -- 날짜와 날짜 사이의 개월수 계산
MONTHS_BETWEEN( 큰데이터, 작은 데이터);
ADD_MONTHS -- 특정날짜에 개월을 더한 날짜 계산
LASTDAY -- 마지막날 구하기
select add_months('2019/01/31', -1) "전 달" from dual;
LAST_DAY -- 월의 마지막 날짜를 계산
select last_day(sysdate) "lastDay" from dual;
NEXT_ DAY -- 다음요일을 표현한다.
SELECT NEXT_DAY(SYSDATE, '월') FROM DUAL; -- 다음주 월요일 날짜 출력
TO_CHAR ( NUMBER | DATE, 'format' )
format에는 YY, MM, DAY 또는 DY(요일) 등이 들어간다.
HH, HH12 ( 1~12), HH24 ( 0 ~ 23)
MI ( 분 ), SS ( 초 )
SYSDATE-TO_DATE('2019/04/08')
AND , OR
NOT연산자 -- 조건에 만족하지 못하는 행을 검색한다.
IN, LIKE, BRETWEEN
WHERE NOT ENAME LIKE '%A%';
★ 집계함수
SUM(총합), AVG(평균), COUNT(행갯수), MIN(최소값), MAX(최대값), STDDEV(표준편차), VARIANCE(분산)
- 전체데이터를 그룹별로 구분하여 통계적인 결과를 구하기 위해 사용
- 결과값은 항상 단행!!
- 그룹함수와 단순컬럼은 함께 사용하는 것이 불가능!!
(만약 그룹함수와 함께 사용하고자 하는 컬럼이 그룹으로 묶여질 수 있다면 group by절과 함께 사용하는 것이 가능)
- NULL은 결과값에서 제외GROUP BY
select deptno, avg(sal) from emp group by deptno;
그룹바이에 조건을 걸때에는 HAVING을 사용한다.
WHERE절에서는 그룹함수 불가. 또, 이중 SELECT문이 가능하다는것
HAVING
집계함수는 WHERE절에 나타날 수 없다. HAVING은 집계 함수에 대해서 조건을 제한하는 것이다.
꼭 GROUPBY 절 뒤에 HAVING절이 나와야 한다.
EX. SELECT * FROM BUY GROUP BY userID HAING SUM(PRICE*AMOUNT)>100;
ORDER BY - 맨마지막 위치
DECODE( 컬럼명, 비교데이터1, 결과데이터1, 비교데이터2, 결과데이터2.....)
보통은 SELECE 옆에 많이 배치한다.
문제) 사원들의 사원번호(empno), 사원명(ename), 부서번호(deptno), 부서명(dname),
사원번호에 대한 홀수 또는 짝수를 출력하시오.
==> decode함수 2개 사용!!
select empno, ename, deptno,decode(deptno, 10, 'ACCOUNTING', 20, 'RESEARCH', 30, 'SALES', 40, 'OPERATIONS') 부서명 ,
decode(mod(empno,2),
0,'짝수',
1,'홀수') 홀짝
from emp;CASE함수
CASE WHEN 조건식1 THEN 결과데이터 1
CASE WHEN 조건식2 THEN 결과데이터 2
ELSE 결과데이터 N -- 만족하지 않았을때 실행할 결과
END
반응형'Database > SQL (oracle, mysql)' 카테고리의 다른 글
[SQL] SUB QUERY ( 서브 쿼리) (0) 2019.05.28 [ SQL ] JOIN 의 종류 (0) 2019.05.27 [DB] SQL 연산자 종류 (0) 2019.05.23 [DB] 쿼리문 사용법 - SELECT (0) 2019.05.23 [ DB ] 테이블의 구조 (0) 2019.05.22