Database/SQL (oracle, mysql)

[DB] SQL 숫자, 날짜, 문자 함수

jinsiri 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

 

반응형