흐르는 시간의 블로그...

출처 :http://develop.sunshiny.co.kr/34

/* 해당 일자에 속한 한주 일자를 출력 : 월~일 */
SELECT TRUNC(SYSDATE, 'IW') + LEVEL -1
FROM DUAL
CONNECT BY LEVEL <= 7
;

/* 해당 년도의 월일을 모두 출력 */
SELECT TRUNC(SYSDATE, 'YEAR') + LEVEL -1
FROM DUAL
CONNECT BY LEVEL <= 365
;


/* 주민번호로 나이 출력 : 출생년도만 입력되어도 가능.*/
SELECT TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')) -
TO_NUMBER(DECODE(SUBSTR('790518', 1, 1), '0', '20', '19') ||
SUBSTR('790518', 1, 2)) + 1 AGE
FROM DUAL
;


-- Oracle --
-- 날자 변환 형식 : 2009-01-03 -- > 2009년 01월 03일

SELECTTO_CHAR(SYSDATE,'YYYY"년" MM"월" DD"일"')AS TODAYFROM DUAL;


-- 현재 날자 시간
SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') FROM DUAL

-- 이틀 전
SELECT TO_CHAR(SYSDATE-2, 'YYYYMMDDHH24MISS') FROM DUAL

-- 3분 전
SELECT TO_CHAR(SYSDATE-(3/(24*60)), 'YYYYMMDDHH24MISS') FROM DUAL

-- 현재 시간에서 20분을 뺀 시간
SELECT TO_CHAR(sysdate - 1/24/60 * 20, 'yyyymmddhh24mi') FROM dual

--------------------------------------------------------------

select /* 오늘날짜 시분초 포함*/
to_char(sysdate,'yyyy/mm/dd hh24:mi:ss')
from dual

select /* 오늘날짜 00시 00분 00초 */
to_char(trunc(sysdate),'yyyy/mm/dd hh24:mi:ss')
from dual
select /* 오늘날짜 00시 00분 00초 위와 동일*/
to_char(trunc(sysdate,'dd'),'yyyy/mm/dd hh24:mi:ss')
from dual

select /* 이번달 1일 00시 00분 00초 */
to_char(trunc(sysdate,'mon'),'yyyy/mm/dd hh24:mi:ss')
from dual

select /* 올해 1월 1일 00시 00분 00초 */
to_char(trunc(sysdate,'year'),'yyyy/mm/dd hh24:mi:ss')
from dual
select /* 올해 1월 1일 00시 00분 00초 */
to_char(to_date('2002','yyyy'),'yyyy/mm/dd hh24:mi:ss')
from dual
select /* 2월 1일 00시 00분 00초 */
to_char(to_date('200202','yyyymm'),'yyyy/mm/dd hh24:mi:ss')
from dual

select /* 2월 2일 00시 00분 00초 */
to_char(to_date('20020202','yyyymmdd'),'yyyy/mm/dd hh24:mi:ss')
from dual
select /* 2월 2일 00시 00분 01초 */
to_char(to_date('20020202','yyyymmdd')+1/68400,'yyyy/mm/dd hh24:mi:ss')
from dual
select /* 2월 2일 00시 00분 00초 -> 한달뒤*/
to_char(add_months(to_date('20020202','yyyymmdd'),1),'yyyy/mm/dd hh24:mi:ss')

from dual
from en-core
laalaal~
날짜 빼기
밑에 날짜 빼기가 있던데 요건 약간 다르게..
(1) 현재 날자에서 하루를 빼고 싶다고 하면
select sysdate() - 1 from dual
(2) 1시간을 빼고 싶으면
select sysdate() - 1/24 from dual
(3) 1분을 빼고 싶으면
select sysdate() - 1/24/60
(q) 1초를 빼고 싶은면 어떻게 할까요? ^^
======================================================================================
- 날짜형 함수

SYSDATE : 현재 시스템의 날짜 및 시간을 구함



LAST_DAY : 지정한 날짜의 해당 월의 마지막 날짜를 구함

-- 현재의 월의 마지막날자를 반환
SELECT LAST_DAY(SYSDATE) "REMAIN DAYS" FROM DUAL;

-- 현재 월의 남은 일수를 반환
SELECT (LAST_DAY(SYSDATE) - SYSDATE) "REMAIN DAYS" FROM DUAL;



MONTHS_BETWEEN : 두 날짜 사이의 개월 수를 구함


-- MONTHS_BETWEEN(DATA1, DATA2)
-- 날자와 날자 사이의 기간을 월 로 나타냄. data1이 data2보다 큰 값

SELECT MONTHS_BETWEEN(LAST_DAY('20091231'), SYSDATE) "남은달" FROM DUAL;
남은달
---------------
10.81507616...




ADD_MONTHS : 지정한 날짜로부터 몇 개월 후의 날짜를 구함

ROUND : 날짜에 대한 반올림

TRUNC : 날짜에 대한 버림



SYSDATE : SYSDATE10-MAY-99

LAST_DAY(날짜값) : LAST_DAY('17-FEB-98')28-FEB-98

MONTHS_BETWEEN(날짜값1, 날짜값2) : MONTHS_BETWEEN('26-APR-97','22-JUL-95')21.1290323

ADD_MONTHS(날짜값, 숫자값) : ADD_MONTHS('22-JUL-95',21)22-APR-97

ROUND(날짜값, 자리수) : 현재 날짜가 1999년 5월 10일이라고 가정하자.

ROUND(SYSDATE,'MONTH')01-MAY-99

TRUNC(날짜값, 자리수) : 현재 날짜가 1999년 5월 10일이라고 가정하자.

TRUNC(SYSDATE,'YEAR')01-JAN-99


- 날짜에 대한 산술연산

날짜 + 숫자 : 날짜 특정한 날로부터 몇일 후의 날짜 계산

날짜 - 숫자 : 날짜 특정한 날로부터 몇일 전의 날짜 계산

날짜 - 날짜 : 숫자 두 날짜 사이의 차이를 숫자로 계산


- 변환형 함수




오늘은 MS-SQl을 쓰다가 필요한 쿼리를 찾던 중 TO_CHAR로 된 쿼리를 찾았는데 써보니 MS-SQL용 쿼리가 아니라 ORACLE용 쿼리여서 제대로 쓸수가 없었습니다.
그래서 찾던 중 ORACLE의 TO_CAHR 함수를 MS-SQL의 CONVERT 함수로 대체할 수 있다는 것을 찾아서 이렇게 정리해 봅니다.

혹시나 저처럼 필요하신 분은 아래를 참조하시면 되겠습니다!!

출처 :
ORACLE의 TO_CHAR 함수를 MSSQL의 CONVERT 함수로


※ ORACLE에서 날짜를 처리할때는
TO_CHAR(SYSDATE,'YYYY-MM-DD') -> 2003-01-23
TO_CHAR(SYSDATE,'YYYY/MM/DD') -> 2003/01/23
TO_CHAR(SYSDATE,'YYYYMMDD') -> 20030123

※ 반대로 처리할때는 TO_DATE함수를 사용하면 되죠~

※ ORACLE에서 숫자를 처리할때는
TO_CHAR(2500000,'L9,999,999') -> w2,500,000
TO_CHAR(2500000,'9,999,999.99') -> 2,500,000.00

※ 반대로 처리할때는 TO_NUMBER함수를 사용하면 되죠~
※ 이 외에도 활용할 수있는 용도가 무지 많습니다.

※ MSSQL에서 날짜를 처리할때는
CONVERT(VARCHAR(10),GETDATE(),120) -> 2003-01-23
CONVERT(VARCHAR(10),GETDATE(),111) -> 2003/01/23
CONVERT(VARCHAR(8),GETDATE(),112) -> 20030123

※ MSSQL에서 숫자를 처리할때는
CONVERT(varchar(20), convert(money,2500000),1) -> 2,500,000.00


출처 :
DBMS별 날짜 포맷변환

1. DBMS 별 시간, 날짜 조회 쿼리

Oracle

select sysdate from dual; 날짜+시분초 까지 조회가능
select current_timestamp from dual; 날짜+밀리초+시간존 까지 조회

MS SQL

select getdate() 날짜 + 밀리초 단위까지 조회가능

DB2 UDB

select current timestamp from sysibm.sysdummy1 날짜+밀리초까지 조회select current date from sysibm.sysdummy1 날짜만 조회
select current time from sysibm.sysdummy1 밀리초 단위시간조회



2. DBMS 별 default date format

Oracle

MS SQL

YYY/MM/DD HH:MI:SS(한글)
MM-DD-YYYY HH:MI:SS(영어)

DB2 UDB

YYYY-MM-DD-HH:MI:SS.MMMMMM (TIMESTAMP 타입)
YYYY-MM-DD (DATE 타입)
HH:MI:SS.MMMMMM (TIME 타입)



3. 날짜 포맷 변환표

형식

RDBMS

변환 문법

'YYYY.MM.DD'

Oracle


TO_CHAR(date_exp, 'YYYY.MM.DD')

MSSQL


CONVERT(VARCHAR, date_exp, 102)

DB2


REPLACE(CHAR(DATE(date_exp),ISO), '-', '.')

Oracle


TO_CHAR(date_exp, 'HH:MI:SS')


MSSQL

CONVERT(VARCHAR, date_exp, 108)


DB2

CHAR(TIME(date_exp) , JIS )


Oracle

TO_CHAR(date_exp, 'YYYY/MM/DD')


MSSQL

CONVERT(VARCHAR, date_exp, 111)


DB2

REPLACE(CHAR(DATE(date_exp), ISO), '-', '/')


Oracle

TO_CHAR(date_exp, 'YYYYMMDD')


MSSQL

CONVERT(VARCHAR, date_exp, 112)


DB2

CHAR(DATE(date_exp))


Oracle

TO_CHAR(date_exp, 'HH24:MI:SS')


MSSQL

CONVERT(VARCHAR(8), date_exp, 114)


DB2

CHAR(TIME(date_exp) )


Oracle

TO_CHAR(date_exp, 'YYYY.MM.DD HH24:MI')


MSSQL

CONVERT(VARCHAR, date_exp, 102) + ' ' + CONVERT(VARCHAR(5), date_exp, 114)


DB2

REPLACE(CHAR(DATE(date_exp), ISO), '-', '.') || CAST( TIME(date_exp) AS CHAR(5))



Oracle

TO_CHAR(date_exp, 'YYYY/MM/DD HH24:MI:SS')


MSSQL

CONVERT(VARCHAR, date_exp, 111) + ' ' + CONVERT(VARCHAR(8), date_exp, 114)


DB2

REPLACE(CHAR(DATE(date_exp), ISO), '-', '/') || CAST( TIME(date_exp))



Oracle/PLSQL: To_Date Function

In Oracle/PLSQL, the to_date function converts a string to a date.

The syntax for the to_date function is:

to_date( string1, [ format_mask ], [ nls_language ] )

string1 is the string that will be converted to a date.

format_mask is optional. This is the format that will be used to convert string1 to a date.

nls_language is optional. This is the nls language used to convert string1 to a date.


The following is a list of options for the format_mask parameter. These parameters can be used in many combinations.

ParameterExplanation
YEARYear, spelled out
YYYY4-digit year
YYY
YY
Y
Last 3, 2, or 1 digit(s) of year.
IYY
IY
I
Last 3, 2, or 1 digit(s) of ISO year.
IYYY4-digit year based on the ISO standard
RRRRAccepts a 2-digit year and returns a 4-digit year.
A value between 0-49 will return a 20xx year.
A value between 50-99 will return a 19xx year.
QQuarter of year (1, 2, 3, 4; JAN-MAR = 1).
MMMonth (01-12; JAN = 01).
MONAbbreviated name of month.
MONTHName of month, padded with blanks to length of 9 characters.
RMRoman numeral month (I-XII; JAN = I).
WWWeek of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
WWeek of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.
IWWeek of year (1-52 or 1-53) based on the ISO standard.
DDay of week (1-7).
DAYName of day.
DDDay of month (1-31).
DDDDay of year (1-366).
DYAbbreviated name of day.
JJulian day; the number of days since January 1, 4712 BC.
HHHour of day (1-12).
HH12Hour of day (1-12).
HH24Hour of day (0-23).
MIMinute (0-59).
SSSecond (0-59).
SSSSSSeconds past midnight (0-86399).
FFFractional seconds. Use a value from 1 to 9 after FF to indicate the number of digits in the fractional seconds. For example, 'FF4'.
AM, A.M., PM, or P.M.Meridian indicator
AD or A.DAD indicator
BC or B.C.BC indicator
TZDDaylight savings information. For example, 'PST'
TZHTime zone hour.
TZMTime zone minute.
TZRTime zone region.


Applies To:

  • Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g


For example:

to_date('2003/07/09', 'yyyy/mm/dd')would return a date value of July 9, 2003.
to_date('070903', 'MMDDYY')would return a date value of July 9, 2003.
to_date('20020315', 'yyyymmdd')would return a date value of Mar 15, 2002.

'프로그래밍??? > 오라클' 카테고리의 다른 글

ORA-01403: no data found 대처 SQL문  (0) 2012.04.06
오라클 날짜형 함수  (0) 2012.04.05
오라클의 TRUNC 함수  (0) 2012.04.05
Native Dynamic SQL의 이해와 예제  (0) 2012.04.04
SQL%ROWCOUNT 편리함 ^^  (0) 2012.04.04