2017년 8월 14일 월요일

[Oracle] Memo - Oracle Function - TO_CHAR

---- 날자 계산하기 -----------------------------------------------------------------------------
-- 오늘날자 (현재날자 0시 0분 0초 ...)
SELECT to_char(trunc(sysdate,'dd')    ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;                

-- 내일날자 (다음날자 0시 0분 0초 ...)
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 ;


---- 달 계산하기 -------------------------------------------------------------------------------

-- 이번달 시작날자(현재달 1일 0시 0분 0초 ...)
SELECT to_char(trunc(sysdate,'mm') ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;                  

-- 이번달 시작날자(현재달 1일 현재시 현재분 현재초 ...)  
SELECT to_char(sysdate - TO_CHAR(SYSDATE, 'dd') + 1 ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;  

-- 다음달 시작날자(다음달 1일 0시 0분 0초 ...)
SELECT to_char(trunc(add_months(sysdate, + 1),'mm') ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;  

-- 다음달 시작날자(다음달 1일 현재시 현재분 현재초 ...)
SELECT to_char(add_months(sysdate, 1) - to_char(add_months(sysdate, 1), 'dd') + 1,'yyyy/mm/dd hh24:mi:ss') FROM dual ;

-- 다음달 오늘 날자(다음달 현재일 현재시 현재분 현재초 ...)
SELECT to_char(add_months(sysdate, 1) ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;


---- 년 계산하기 -------------------------------------------------------------------------------

-- 올해 시작날자(올해 1월 1일 0시 0분 0초 ...)
SELECT to_char(trunc(sysdate, 'yyyy') ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;    

-- 1년전 현재일자(전년 현재달 현재일 0시 0분 0초 ...)
SELECT to_char(trunc(add_months(sysdate, -12), 'dd'),'yyyy/mm/dd hh24:mi:ss') FROM dual ;  

-- 1년전 현재일자(전년 현재달 현재일 현재시 현재분 현재초 ...)
SELECT to_char(add_months(sysdate, -12),'yyyy/mm/dd hh24:mi:ss') FROM dual ;


---- 참고사항 -----------------------------------------------------------------------------------

-- TO_CHAR      : 숫자나 날짜를 문자열로 변환
-- TO_NUMBER    : 문자를 숫자로 변환
-- TO_DATE      : 문자를 날짜로 변환

SELECT sysdate() -1 FROM dual;   -- 현재시간 - 1일
SELECT sysdate() -1/24 FROM dual;  -- 현재시간 - 1시간
SELECT sysdate() -1/24/60 FROM dual;  -- 현재시간 - 1분
SELECT sysdate() -1/24/60/60 FROM dual;  -- 현재시간 - 1초

-- YYYY     : 4자리 연도로 표시
-- YY       : 끝의 2자리 연도로 표시
-- YEAR     : 연도를 알파벳으로 표시
-- MM       : 달을 숫자로 표시
-- MON      : 달을 알파벳 약어 로표시
-- MONTH    : 달을 알파벳으로 표시
-- DD       : 일자를 숫자로 표시
-- DAY      : 일에 해당하는 요일
-- DY       : 일에 해당하는 요일의 약어
-- HH       : 12시간으로 표시(1-12)
-- HH24     : 24시간으로 표시(0-23)
-- MI       : 분을 표시
-- SS       : 초를 표시
-- AM, PM   : 오전인지 오후인지를 표시


---- 기초 날자구하기 --------------------------------------------------------------------------

-- SYSDATE          : 현재 시스템의 날짜 및 시간을 구함
SELECT sysdate FROM dual;

-- LAST_DAY         : 지정한 날짜의 해당 월의 마지막 날짜를 구함
SELECT last_day(sysdate) FROM dual;

-------------------------------------------------------------------------------
-- 두 날자 사이의 차이 (1번째 인자가 2번째인자보다 작으면 음수, 크면 양수)
-- 날자를 구할때 날자이후 데이터 까지 있다면 계산이 시간단위까지 계산하는듯하다
-- 그래서 날자까지만 변환해서 잘라줘야 한다.

SELECT to_date(to_char(to_date('20120220042517','yyyymmddhh24miss'), 'yyyymmdd'), 'yyyymmdd') - to_date(to_char(sysdate, 'yyyymmdd'), 'yyyymmdd') FROM dual;
-------------------------------------------------------------------------------

-- MONTHS_BETWEEN   : 두달 사이의 개월 차이 (1번째 인자가 2번째인자보다 작으면 음수, 크면 양수)
SELECT MONTHS_BETWEEN(to_date('20120219','yyyymmdd'), sysdate) FROM dual;

-- ADD_MONTHS       : 현재달로부터 지정한 달의 날자를 구함 (즉 1달뒤 2달뒤 등의 날자를 구함)
SELECT add_months(sysdate, -3) FROM dual;

-- ROUND            : 날짜에 대한 반올림 (12시이후(12:00 00초포함)면 1일을 더함)
SELECT round(sysdate) FROM dual;
SELECT round(to_date('20110221120000', 'yyyymmddhh24miss')) FROM dual;

-- TRUNC : 날짜에 대한 버림
SELECT trunc(sysdate) FROM dual;


---- TO_CHAR 의 변환 형식들 ----------------------------------------------------------------

-- 9    : 일반적인 숫자를 나타냄
SELECT to_char('123', '999999') FROM dual;

-- 0    : 앞의 빈자리를 0으로 채움
SELECT to_char('123', '000000') FROM dual;

-- $    : dollar를 표시함
SELECT to_char('123', '$999999') FROM dual;

-- L    : 지역 통화 단위(ex \)
SELECT to_char('123', 'L999999') FROM dual;

-- . : 소숫점을 표시함
SELECT to_char('123', '999.999') FROM dual;
SELECT to_char('12.3', '999.999') FROM dual;

-- , : 천단위를 표시함
SELECT to_char('12345', '999,999,999') FROM dual;

댓글 1개:

  1. I've played them long enough to imagine they don't seem to be} random, but as I mentioned, it is my opinion from my observations, and you're entitled to yours. Next time would possibly be} taking part in} slots, cease and wonder why those prime slot symbols and/or scatters mysteriously vanish after some time - short-term random, certain - long-term random, not so much... Your taking part in} session will find yourself if you run out of credit. You can reload the web page to attempt the sport at no cost or start to play with actual cash. They are the head of exhibiting a developer's 1xbet graphics abilities and incessantly give the player a extra immersive state of play.

    답글삭제

언제 부터 였던가 생각해보니 아르바이트 겸 외부 컨설팅을 의뢰 받고 맥북 프로를 처음 써봤을 때 부터 였던 것 같다. 지금은 거의 대부분의 작업을 맥으로 작업을 하다 보니 윈도우에서만 실행되는 일부 프로그램들 때문과 회사 내부 ERP프로그램이 윈도우 ...