본문 바로가기

IT/Oracle

오라클 함수정리 3탄 (단일함수)

SELECT

  DEPARTMENT_ID

  FROM EMPLOYEES

 WHERE UPPER(department_id) = 80;


SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') FROM DUAL;

--SYSDATE(현재날짜) 24가없으면 12시간 24가 있으면 24시제 -, /(문자열 표시)


SELECT

    TO_CHAR(SYSDATE,'D') AS D

     , TO_CHAR(SYSDATE,'DAY') AS DAY

    , TO_CHAR(SYSDATE,'DD') AS DD

, TO_CHAR(SYSDATE,'DY') AS DY

, TO_CHAR(SYSDATE,'HH') AS HH

, TO_CHAR(SYSDATE,'HH24') AS HH24

, TO_CHAR(SYSDATE,'MI') AS MI

, TO_CHAR(SYSDATE,'MM') AS MM

, TO_CHAR(SYSDATE,'MON') AS MON

, TO_CHAR(SYSDATE,'MONTH') AS MONTH

, TO_CHAR(SYSDATE,'SS') AS SS

, TO_CHAR(SYSDATE,'YEAR') AS YEAR

, TO_CHAR(SYSDATE,'YYYY') AS YYYY

  FROM DUAL;


SELECT

  TO_CHAR(HIRE_DATE,'YYYY/MM')

, FIRST_NAME || ' ' || LAST_NAME AS NAME

  FROM EMPLOYEES

 WHERE TO_CHAR(HIRE_DATE,'YYYY') = '2005'

ORDER BY TO_CHAR(HIRE_DATE,'YYYY-MM') ASC;

-- 등식 = <- 'YYYY-MM' = '2005' (X) / 'YYYY-MM' = '2005-06'

-- ORDER BY ASC <-오름차순 DESC 내림차순


-- 2005년도에 입사한 사원들의 월별 입사 인원을 월 순으로 출력하시오.

SELECT  TO_CHAR(HIRE_DATE,'YYYY-MM')

, COUNT(LAST_NAME)

--    카운트 (LAST_NAME)

  FROM  EMPLOYEES

 WHERE  TO_CHAR(HIRE_DATE,'YYYY') = '2005'

 GROUP BY TO_CHAR(HIRE_DATE,'YYYY-MM')

--월별 -> GROUP BY

 ORDER BY TO_CHAR(HIRE_DATE,'YYYY-MM') ASC;


CASE의 사용 ( SAME COUNT) anther way

SELECT DEPARTMENT_ID, 

       CASE DEPARTMENT_ID

         WHEN 10 THEN 'ACCOUNTING'

         WHEN 20 THEN 'RESEARCH'

         WHEN 30 THEN 'SALES'

         ELSE 'OPERATIONS'

        END as "Dept Name"  FROM EMPLOYEES;


SELECT  TRUNC(SYSDATE,'YYYY') AS YYYY

, TRUNC(SYSDATE,'MM') AS MM

      , TRUNC(SYSDATE,'DD') AS DD

  FROM DUAL;

-- 용병 테이블 -> 명령어를 실행해볼때 사용

-- TRUNC <-[절삭] 정해진 기간으로 짤라낸다 OR 숫자는 정해진 자릿수까지

-- MM까지만 살리는것 DD까지만 살리는 것


--오늘 날짜

SELECT TO_CHAR(TRUNC(SYSDATE,'DD') , 'YYYY/MM/DD HH24:MI:SS')

FROM DUAL;


--내일 날짜

SELECT  TO_CHAR(TRUNC(SYSDATE,'DD') +1, 'YYYY/,MM/DD HH24:MI:SS')

  FROM DUAL;

SELECT  TO_CHAR(SYSDATE + 1 , 'YYYY/MM/DD HH24:MI:SS')

  FROM DUAL;


--이번달 시작날짜

SELECT to_char(trunc(sysdate,'mm') ,'yyyy/mm/dd hh24:mi:ss')

  FROM dual ;


--다음달 시작날

SELECT to_char(trunc(add_months(sysdate, + 1),'mm') ,'yyyy/mm/dd hh24:mi:ss')

  FROM dual ;


SELECT sysdate -1 FROM dual;   -- 현재시간 - 1일


SELECT sysdate -1/24 FROM dual;  -- 현재시간 - 1시간

--

SELECT sysdate -1/24/60 FROM dual;  -- 현재시간 - 1분


SELECT sysdatea-1/24/60/60 FROM dual;  -- 현재시간 - 1초


;

SELECT TO_DATE('19990220181030','YYYYMMDD HH24MISS')

FROM DUAL;

--오류 주의 TO_DATE('199-902-201-81-030','YYYYMMDDHH24MISS')<-X

--오류 주의 TO_DATE('19990220181030','YYYY-MM-DD-HH 24MISS')<-O


SELECT SYSDATE, SYSDATE - TO_YMINTERVAL('1-1') FROM DUAL;

--1년빼고 1월 빼고 / -를 +로 만들면 10년후의 약속

;;;;


SELECT  SYSDATE

, EXTRACT(YEAR FROM SYSDATE) AS YEAR

      , EXTRACT(MONTH FROM SYSDATE) AS MONTH

      , EXTRACT(DAY FROM SYSDATE) AS DAY

  FROM DUAL;


--DECODE 함수


-- DECODE 함수는 조건에 따라 데이터를 다른 값이나 컬럼값으로 추출 할 수 있다.

-- DECODE(VALUE, IF1, THEN1, IF2, THEN2...) 형태로 사용 할 수 있다.

-- VALUE 값이 IF1일 경우에 THEN1 값을 반환하고, VALUE 값이 IF2일 경우에는 THEN2 값을 반환한다.

-- DECODE 함수 안에 DECODE함수를 중첩으로 사용 할 수 있다.


SELECT

       DEPARTMENT_ID


, DECODE(DEPARTMENT_ID, 10, 'ACCOUNTING',


        20, 'RESEARCH',


                             30, 'SALES', 'OPERATIONS') NAME

  FROM EMPLOYEES


 WHERE DEPARTMENT_ID IN (10,20,30)


 ORDER BY DEPARTMENT_ID ASC;

--DEPARTMENT_ID가 10번이면 ACCOUNTTING로 바꾸라

--IN절 -> 10, 20, 30 이 되어있는 나머지는 띄우지 않는다.

--10, 20, 30 이 아니면 OPERATIONS<-로 표시하라

--가독성을 위해서 표지를 많이 사용해야 한다!



'IT > Oracle' 카테고리의 다른 글

오라클 함수정리 4탄 (그룹함수)  (0) 2015.07.18
오라클 정규화  (0) 2015.07.15
오라클 삭제 (oracle 레지스트리 완전삭제)  (0) 2015.04.17
오라클 함수정리 2탄  (0) 2014.12.15
오라클 함수정리 1탄  (0) 2014.12.15