ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    댓글

Designed by Tistory.