본문 바로가기
2019/ORACLE

SQL DATE

by SOLYI 2019. 11. 15.

--오늘날짜
select sysdate
from dual;

--년월일 시간분초 출력
select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss')
from dual;

--3달후 
select sysdate, add_months(sysdate,3)
from dual;

--12달후
select sysdate, add_months(sysdate,12)
from dual;

--sysdate와의 차이점은? 업서.
select current_date from dual;

--lastday (이번달의 마지막날)
select last_day(sysdate) from dual;
select last_day(to_date('2019-02-02', 'yyyy-mm-dd')) 
from dual;

--3달후 마지막날
select last_day(add_months(sysdate, 3))
from dual;

--돌아오는 요일
select next_day(sysdate, '화') from dual;
select next_day(sysdate, '금') from dual;
select next_day(sysdate, 'friday') from dual;
  
--시간에 따라 반올림
select round(sysdate), 
round(to_date('2016-11-15 13:00:00', 'yyyy-mm-dd hh-mi-ss'))
from dual;

--열흘후
select sysdate+10, sysdate+100
from dual;

--현재시간 및 3시간뒤(3/24)
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'),
to_char(sysdate+3/24, 'yyyy-mm-dd hh24:mi:ss')
from dual;

--어제오늘내일
select sysdate-1 as "어제", sysdate as "오늘", sysdate+1 as "내일"
from dual;

--입사한지
select (sysdate- hiredate) /365
from emp;

--연도 반올림
select round(sysdate, 'yy')
from dual;

--월 반올림
select round(sysdate, 'mm')
from dual;

--월 기준 반올림 16일부터 다음달 1일
select round(to_date('2019-11-16', 'yyyy-mm-dd'),'mm')
from dual;

--15일이면 1일
select round(to_date('2019-11-15', 'yyyy-mm-dd'),'mm')
from dual;

--시간/분 절삭 
select to_char(trunc(sysdate, 'year'), 'yyyy-mm-dd hh:mi:ss')
from dual;
select to_char(trunc(sysdate, 'mi'), 'yyyy-mm-dd hh:mi:ss')
from dual;

--시간/분 반올림
select to_char(round(sysdate, 'hh'), 'yyyy-mm-dd hh:mi:ss')
from dual;
select to_char(round(sysdate, 'mi'), 'yyyy-mm-dd hh:mi:ss')
from dual;

--month between
select months_between(to_date('2019-01-30', 'yyyy-mm-dd'), sysdate)
from dual;

select months_between(sysdate, to_date('2019-01-15', 'yyyy-mm-dd'))
from dual;


/*
        to_char->    <-to_char
    숫자          문자          날짜
      <-to_number     to_date->
*/


select sysdate-to_date('2019-01-01','yyyy-mm-dd')
from dual;

--숫자로 변경
select 3000-to_number('2,000','9,999')
from dual;

select to_char(sysdate,'yyyy')
from dual;

select to_char(sysdate,'yyyy-mm') from dual;         

select to_char(10000,'9,999,999') from dual;

-->  원 표시
select to_char(10000,'L9,999,999') from dual;  

--> 달러 표시
select to_char(10000,'$9,999,999') from dual; 

--> emp 테이블에 사원들의 월급을 달러 표시
select to_char(sal,'$9,999,999') from emp; 


--2019 19 11 11월 11월 15 319 6 금요일
select to_char(sysdate, 'yyyy yy mm mon month dd ddd d day')
from dual;


--03 15 오후 03
select to_char(sysdate, 'hh hh24 am hh') from dual;

-- 현재 시간 분 초
select to_char(sysdate, 'hh mi ss') from dual;

-- 금 15일 6(요일) 금요일
select to_char(sysdate, 'dy dd d day') from dual;

--숫자를 문자로(원표시)
select to_char(1200000, 'l9,999,999') from dual;

--원 표시
select empno, ename, to_char(sal, 'l999,999') 
from emp;


select sysdate-to_date('2019/01/01', 'yyyy-mm-dd')
from dual;

--에러
select 10000 - '1,200' from dual;

--형변환
select 10000 - to_number('1,200', '9,999')
from dual;

--Q. 82년도에 입사한 사원의 사워번호 이름 급여 입사일을 출력하시오
--1. sbstr
select empno, ename, sal, hiredate
from emp
where substr(hiredate,1,2) = '82';

--2. to_char
select empno, ename, sal, hiredate
from emp
where to_char(hiredate, 'yyyy') = 1982;

--3. trunc (절삭이니깐.. 연도로 절삭하면 1982만 남으므로...)
select empno, ename, sal, hiredate
from emp
where trunc(hiredate, 'yyyy') = '1982-01-01';
반응형

'2019 > ORACLE' 카테고리의 다른 글

SQL DECODE  (0) 2019.11.15
SQL NVL NVL2  (0) 2019.11.15
SQL INSTR  (0) 2019.11.15
SQL LPAD RPAD  (0) 2019.11.15
SQL TRIM LTRIM RTRIM  (0) 2019.11.15