일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- header setting
- docker 설치
- React
- spring
- swagger
- generate pojos
- generate entity
- docker
- spring boot
- JavaScript
- dto valid
- java9
- JPA
- Java
- java8
- ollama langflow
- 리눅스
- custom valid
- NextJS
- SpringBoot
- CentOS6
- 도커
- Next.js 14
- MySQL
- 초기 세팅
- 헤더 설정
- jvm
- memcached
- 초기 구축
- jpa entity자동
Archives
- Today
- Total
개발자의 길
[ORACLE] TO_CHAR 함수 모든것! 본문
TO_CHAR(datetime) 함수
이 함수는 DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE의 데이터타입을 사용자가 지정한 폼을 갖는 VARCHAR2의 데이터타입으로 변환한다.
? DATE은 디폴트 date 포맷으로 바뀐다.
? TIMESTAMP나 TIMESTAMP WITH LOCAL TIME ZONE은 디폴트 TIMESTAMP 포맷으로 바뀐다.
? TIMESTAMP WITH TIME ZONE은 디폴트 TIMESTAMP WITH TIME ZONE 포맷으로 바뀐다.
【형식】 TO_CHAR( date [,'fmt' [,'nlsparam']])
날짜 출력 형식의 종류(Datetime Format Elements) |
종류 | 의미 | 사용 예 | 결과 |
---|---|---|---|
CC SCC | 세기(世紀) 표시 | (sysdate,'CC') (sysdate,'SCC') | 21 21 |
AD (A.D.) BC (B.C.) | BC,AD 표현 | (sysdate,'AD') (sysdate,'BC') | AD BC |
Q | 월을 분기로 표시 | (sysdate,'Q') | 4(10-12월) |
MI | minute을 표시 | (sysdate,'MI') | 21 |
MM | 월을 숫자로 표시 | (sysdate,'MM') | 11 |
MONTH | 달의 영문표기 모두 표시 | (sysdate,'MONTH') | NOVEMER |
MON | 3문자로 된 달의 이름 | (sysdate,'MON') | NOV |
WW | 년중 몇번째 주 | (sysdate,'WW') | 44 |
W | 월중 몇번째 주 | (sysdate,'W') | 4 |
DDD | 연중 일로 표현 | (sysdate,'DDD') | 329 |
DD | 월중 일로 표현 | (sysdate,'DD') | 25 |
D | 주중 일로 표현 | (sysdate,'D') | 6 |
DY | 3문자로 된 요일표기 | (sysdate,'DY') | FRI |
DAY | 요일의 영문표기 모두 표시 | (sysdate,'DAY') | FRIDAY |
DL | long date format(자세한 날짜형식)으로 표기 | (sysdate,'DL') | Thursday, February 12, 2009 |
DS | short date format(간략한 날짜형식)으로 표기 | (sysdate,'DS') | 2/12/2009 |
FF[1...9] | 밀리초의 표시자리수 지정 | (systimestamp,'SS.FF') | 51.978 |
HH HH12 HH24 | 시간 표기(12시간, 24시간표기) | (systimestamp,'HH') (sysdate,'HH24') | 06 18 |
IW | 1년중 몇째주 | (systimestamp,'IW') | 07 |
I IY IYY IYYY | 년표기의 자릿수 | (sysdate,'I') (sysdate,'IY') (sysdate,'IYY') (sysdate,'IYYY') | 9 09 009 2009 |
J | Julian년호 숫자 | (sysdate,'J') | 2454875 |
AM (A.M.) PM (P.M.) | 오전, 오후의 영문 표기 | (sysdate,'AM') (sysdate,'PM') | AM PM |
RM | 달을 로마자 표기 | (sysdate,'RM') | II |
RR | 2자릿수 년도 표기, YY와 달리 명시한 년도수에 따라 값이 틀림 | ||
RRRR | 년을 2자리, 또는 4자리로 표기 | (sysdate,'RRRR') | 2009 |
SS | 현재시간의 초(0∼59) | (sysdate,'SS') | 20 |
SSSSS | 자정부터 지금까지 지난 초(0∼86399) | (sysdate,'SSSSS') | 37230 |
TS | 시간의 간략표기 | (sysdate,'TS') | 10:28:51 AM |
TZD | TZR에 의한 daylight표기 | (systimestamp,'TZD') | |
TZH | Time Zone HOUR표기 | (systimestamp,'TZH') | +09 |
TZM | Time Zone Minute 표기 | (systimestamp,'TZM') | 02 |
TZR | Time Zone 표기 | (systimestamp,'TZR') | +09:00 |
X | Local radix character 표기 | (systimestamp,'HH:MI:SSXFF') Isystimestamp,'X') | 11:00:57.025518 . |
YEAR SYEAR | 년도 영문으로 표시 BC는 (-)로 표기 | (sysdate,'YEAR') (sysdate,'SYEAR') | TWO THOUSAND NINE TWO THOUSAND NINE |
YYY YY Y | 년도 표현 | (sysdate,'YYY') (sysdate,'YY') (sysdate,'Y') | 009 09 9 |
YYYY SYYYY | 4자리 년도 표시 BC는 (-)로 표기 | (sysdate,'YYYY') (sysdate,'SYYYY') | 2009 2009 |
Y,YYY | 4자리 년도 표시중 컴마사용 | (sysdate,'Y,YYY') | 2,009 |
날짜의 출력 형식을 지정하는 접미사(Datetime format Element Suffixes) |
앞의 표에서 나타낸 datetime format model을 더 다양하게 표시하기 위해서 사용하는 접미사의 종류와 용도를 정리하면 아래의 표와 같다.
접미사 | 의미 | 예시 | 표시값 |
---|---|---|---|
SP | 날짜를 기수의 영문으로 표기 | (sysdate,'DDSP') | FIVE |
TH | 날짜를 숫자로 된 서수의 영문으로 표기 | (sysdate,'DDTH') | 5TH |
SPTH | 날짜를 서수의 영문으로 표기 | (sysdate,'DDSPTH') | FIFTH |
THSP | (sysdate,'DDTHSP') | ||
"text" | 인용부호속의 문자열을 결과에 그대로 표시 | (sysdate,'DD "of" MON') | 5 of FEB |
- / . , ; : | 인용부호 없이 사용한 문자를 결과에 그대로 표시 | (sysdate,'DD-MON') (sysdate,'DD/MON') (sysdate,'DD,MON') (sysdate,'DD.MON') (sysdate,'DD;MON') (sysdate,'DD:MON') | 05-FEB 05/FEB 05,FEB 05.FEB 05;FEB 05:FEB |
SQL> select to_char(sysdate,'DDTH') from dual; TO_C ---- 05TH SQL> select to_char(sysdate,'DDSP') from dual; TO_CHAR(SYSD ------------ FIVE SQL> select to_char(sysdate,'DDSPTH') from dual; TO_CHAR(SYSDAT -------------- FIFTH SQL> select to_char(sysdate,'DDTHSP') from dual; TO_CHAR(SYSDAT -------------- FIFTH SQL> select to_char(sysdate,'WTH') from dual; TO_ --- 1ST SQL> select to_char(sysdate,'MMTH') from dual; TO_C ---- 02ND SQL> select to_char(sysdate,'WWTH') from dual; TO_C ---- 05TH SQL> 【예제】 SQL> select sysdate, to_char(sysdate,'DD-MON-YYYY') from dual; SYSDATE TO_CHAR(SYS --------- ----------- 05-AUG-04 05-AUG-2004 SQL> select to_char(sysdate,'DY') from dual; TO_ --- THU SQL> select to_char(sysdate,'dd-mon-yy hh24:MI'), round(sysdate) 2 from dual; TO_CHAR(SYSDATE,'D ROUND(SYSDAT ------------------ ------------ 25-dec-05 18:52 26-DEC-05 SQL> select to_char(sysdate,'DD "of" MON') from dual; TO_CHAR(SYSD ------------ 05 of FEB SQL> select to_char(sysdate,'DD-MON') from dual; TO_CHAR(S --------- 05-FEB SQL> select to_char(sysdate,'DD / MON') from dual; TO_CHAR(SYS ----------- 05 / FEB SQL> select to_char(sysdate,'DD,MON') from dual; TO_CHAR(S --------- 05,FEB SQL> select to_char(sysdate,'DD.MON') from dual; TO_CHAR(S --------- 05.FEB SQL> select to_char(sysdate,'DD;MON') from dual; TO_CHAR(S --------- 05;FEB SQL> select to_char(sysdate,'DD:MON') from dual; TO_CHAR(S --------- 05:FEB SQL> select to_char(sysdate,'CC'), to_char(sysdate,'SCC') from dual; TO_C TO_CHA ---- ------ 21 21 SQL> select to_char(systimestamp,'Y,YYY') from dual; TO_CHAR(SY ---------- 2,009 SQL> select to_char(sysdate,'YEAR'),to_char(sysdate,'AD'), 2 to_char(sysdate,'Q'), to_char(sysdate,'MM'), 3 to_char(sysdate,'MON'), to_char(sysdate,'MONTH') 4 from dual; TO_CHAR(SYSDATE,'YEAR') TO_CHA T TO TO_CHAR( TO_CHA ------------------------------------------ ------ - -- -------- ------ TWO THOUSAND SIX 서기 1 02 2월 2월 SQL> select to_char(sysdate,'RM'), to_char(sysdate,'WW'), 2 to_char(sysdate,'W'), to_char(sysdate,'DDD'), 3 to_char(sysdate,'DD'), to_char(sysdate,'D'), 4 to_char(sysdate,'DY'), to_char(sysdate,'DAY') from dual; TO_C TO T TO_ TO T TO_C TO_CHAR(S ---- -- - --- -- - ---- --------- II 06 2 039 08 4 수 수요일 SQL> select to_char(sysdate,'DL') from dual; TO_CHAR(SYSDATE,'DL') -------------------------------------------------------------------------- Thursday, February 12, 2009 SQL> select to_char(sysdate,'fmDay, Month dd, YYYY') from dual; TO_CHAR(SYSDATE,'FMDAY,MONTHDD,YYYY') -------------------------------------------------------------------------- Thursday, February 12, 2009 SQL> select to_char(sysdate,'fmDay, dd. Month YYYY') from dual; TO_CHAR(SYSDATE,'FMDAY,DD.MONTHYYYY') -------------------------------------------------------------------------- Thursday, 12. February 2009 SQL> select to_char(sysdate,'MM/DD/RRRR') from dual; TO_CHAR(SYSDATE,'MM/ -------------------- 02/12/2009 SQL> select to_char(sysdate,'DD/MM/RRRR') from dual; TO_CHAR(SYSDATE,'DD/ -------------------- 12/02/2009 SQL> select to_char(sysdate,'DS') from dual; TO_CHAR(SYSDATE,'DS' -------------------- 2/12/2009 SQL> select to_char(systimestamp,'HH:MI:SS.FF') from dual; TO_CHAR(SYSTIMESTAMP,'HH:MI:SS.FF') ------------------------------------ 06:15:23.933285 SQL> select to_char(systimestamp,'SS.FF3') from dual; TO_CHAR(SYSTIMESTAMP,'SS ------------------------ 51.978 SQL> select to_char(sysdate,'HH'), to_char(sysdate,'HH12'), 2 to_char(sysdate,'HH24') from dual; TO_C TO_C TO_C ---- ---- ---- 06 06 18 SQL> select to_char(sysdate,'IW') from dual; TO_C ---- 07 SQL> select to_char(sysdate,'I') "i", to_char(sysdate,'IY') "iy", 2 to_char(sysdate,'IYY') "iyy", to_char(sysdate,'IYYY') "iyyy" 3 from dual; i iy iyy iyyy -- ---- ------ -------- 9 09 009 2009 SQL> select to_char(sysdate,'J') from dual; TO_CHAR(SYSDAT -------------- 2454875 SQL> select to_char(sysdate,'AM'), to_char(sysdate,'PM') from dual; TO_C TO_C ---- ---- PM PM SQL> select sysdate, to_char(sysdate,'Q') from dual; SYSDATE TO ------------ -- 13-FEB-09 1 SQL> select sysdate, to_char(sysdate,'RM') from dual; SYSDATE TO_CHAR( ------------ -------- 13-FEB-09 II SQL> select to_char(sysdate,'RR'), to_char(sysdate,'RRRR') from dual; TO_C TO_CHAR( ---- -------- 09 2009 SQL> select to_char(systimestamp,'HH:MI:SS.FF'), 2 to_char(sysdate,'SS'), to_char(sysdate,'SSSSS') from dual; TO_CHAR(SYSTIMESTAMP,'HH:MI:SS.FF') TO_C TO_CHAR(SY ------------------------------------ ---- ---------- 10:20:30.731386 30 37230 SQL> select to_char(sysdate,'TS') from dual; TO_CHAR(SYSDATE,'TS') ---------------------- 10:28:51 AM SQL> select to_char(systimestamp,'TZD'), to_char(systimestamp,'TZH'), 2 to_char(systimestamp,'TZM'), to_char(systimestamp,'TZR') 3 from dual; TO_CHAR(SYST TO_CHA TO_C TO_CHAR(SYSTIMESTAMP,'TZR') ------------ ------ ---- ----------------------------- +09 00 +09:00 SQL> select to_char(sysdate,'W'), to_char(sysdate,'WW') from dual; TO TO_C -- ---- 2 07 SQL> select to_char(systimestamp,'HH:MI:SSXFF'), 2 to_char(systimestamp) from dual; TO_CHAR(SYSTIMESTAMP,'HH:MI:SSXFF') TO_CHAR(SYSTIMESTAMP) -------------------------------------- ------------------------------------------ 11:00:57.025518 13-FEB-09 11.00.57.025518 AM +09:00 SQL> select to_char(systimestamp,'X') from dual; TO -- . SQL> select to_char(sysdate,'YEAR') "year", 2 to_char(sysdate,'SYYYY') "syyyy" from dual; year syyyy ------------------------- ---------------- TWO THOUSAND NINE 2009 SQL> select to_char(sysdate,'YYYY'), to_char(sysdate,'YYY'), 2 to_char(sysdate,'YY'), to_char(sysdate,'Y') from dual; TO_C TO_ TO T ---- --- -- - 2009 009 09 9 SQL> select to_char(sysdate,'YYYY'), 2 to_char(sysdate,'SYYYY') from dual; TO_CHAR( TO_CHAR(SY -------- ---------- 2009 2009 SQL> select to_char(sysdate,'Y,YYY') from dual; TO_CHAR(SY ---------- 2,009 SQL> select to_char(sysdate,'HH'), to_char(sysdate,'HH24'), 2 to_char(sysdate,'MI'), to_char(sysdate,'SS'), 3 to_char(sysdate,'SSSSS'), to_char(sysdate,'AM') 4 from dual; TO TO TO TO TO_CH TO_C -- -- -- -- ----- ---- 07 19 59 58 71998 오후 SQL>
날짜의 출력 형식을 지정하는 접두사(Datetime Format Model Modifier: FX와 FM) |
그러므로 fx를 사용하면 update 문에서 to_date를 이용하여 데이터를 갱신할 때 기존의 데이터 포맷과 동일성 여부를 체크하여 일치하는 경우에만 데이터를 갱신할 수 있으므로 데이터의 일관성에 유용하다.
구분 | 설명 |
---|---|
FM | 날짜 표기에서 공백을 표시하지 않음 |
FX | 날짜의 표기가 정확한지 체크 |
FXFM | FX와 FM을 중복하여 적용 |
SQL> select to_char(sysdate, 'fmDDTH')??' of '?? 2 to_char(sysdate,'fmMonth')??', '?? 3 to_char(sysdate,'YYYY') "Ides" from dual Ides --------------------------- 8TH of April, 2010 | ☜ fm 변경자(modifier)를 이용한 경우로 월(月)의 표현에 빈 자리가 생략되어 표현됨 공백의 blank padding이 없음 |
SQL> select to_char(sysdate, 'DDTH')??' of '?? 2 to_char(sysdate, 'Month')??', '?? 3 to_char(sysdate, 'YYYY') "Ides" from dual; Ides --------------------------- 08TH of April , 2010 | ☜ fm 변경자(modifier)를 사용하지 않은 경우로 월(月)이 9자리로 월 표현 후에 나머지 공간은 블랭크로 표현됨, 공백의 blank padding이 있음 |
char | 'fmt' | Match or Error? |
---|---|---|
'15/ JAN /2010' | 'DD-MON-YYYY' | Match |
'15! JAN% /2010' | 'DD-MON-YYYY' | Error |
'15/JAN/2010' | 'FXDD-MON-YYYY' | Error |
'15-JAN-2010' | 'FXDD-MON-YYYY' | Match |
'1-JAN-2010' | 'FXDD-MON-YYYY' | Error |
'01-JAN-2010' | 'FXDD-MON-YYYY' | Match |
'1-JAN-2010' | 'FXFMDD-MON-YYYY' | Match |
현재 시스템에 설정되어 있는 날짜 포맷을 확인하는 방법은 다음과 같다. SQL> select value from nls_session_parameters 2 where parameter='NLS_DATE_FORMAT'; VALUE ---------------------- DD-MON-RR SQL> 일시적으로 날짜 포맷을 변경할 수 있으며, 이 방법은 sqlplus를 종료하면 해제되기 때문에 재접속시 다시 설정해야 한다.
SQL> select hiredate from emp; HIREDATE ------------ 17-DEC-80 20-FEB-81 22-FEB-81 02-APR-81 28-SEP-81 01-MAY-81 09-JUN-81 19-APR-87 17-NOV-81 08-SEP-81 23-MAY-87 03-DEC-81 03-DEC-81 23-JAN-82 14 rows selected. | SQL> alter session set NLS_DATE_FORMAT='YYYY-MM-DD'; Session altered. SQL> select hiredate from emp; HIREDATE ---------- 1980-12-17 1981-02-20 1981-02-22 1981-04-02 1981-09-28 1981-05-01 1981-06-09 1987-04-19 1981-11-17 1981-09-08 1987-05-23 1981-12-03 1981-12-03 1982-01-23 14 rows selected. |
【예제】 SQL> create table date_tab( 2 ts_col TIMESTAMP, 3 tsltz_col TIMESTAMP WITH LOCAL TIME ZONE, 4 tstz_col TIMESTAMP WITH TIME ZONE); Table created. SQL> alter session set time_zone = '+9:00'; Session altered. SQL> insert into date_tab values( 2 TIMESTAMP '2009-12-01 10:00:00', 3 TIMESTAMP '2009-12-01 10:00:00', 4 TIMESTAMP '2009-12-01 10:00:00'); 1 row created. SQL> insert into date_tab values( 2 TIMESTAMP '2009-12-02 10:00:00 +9:00', 3 TIMESTAMP '2009-12-02 10:00:00 +9:00', 4 TIMESTAMP '2009-12-02 10:00:00 +9:00'); 1 row created. SQL> select TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS ts_date, 2 TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM') AS tstz_date 3 from date_tab 4 order by ts_date, tstz_date; TS_DATE TSTZ_DATE ------------------------------- ------------------------------------------ 01-DEC-2009 10:00:00.000000 01-DEC-2009 10:00:00.000000 +09:00 02-DEC-2009 10:00:00.000000 02-DEC-2009 10:00:00.000000 +09:00 SQL> select SESSIONTIMEZONE, 2 TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz 3 from date_tab 4 order by sessiontimezone, tsltz; SESSIONTIMEZONE TSLTZ ---------------- -------------------------------------------------- +09:00 01-DEC-2009 10:00:00.000000 +09:00 02-DEC-2009 10:00:00.000000 SQL> alter SESSION SET TIME_ZONE = '-5:00'; Session altered. SQL> select SESSIONTIMEZONE, 2 TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz 3 from date_tab 4 order by sessiontimezone, tsltz; SESSIONTIMEZONE TSLTZ ----------------- ------------------------------------------- -05:00 01-DEC-2009 20:00:00.000000 -05:00 30-NOV-2009 20:00:00.000000 SQL> select SESSIONTIMEZONE, 2 to_char(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz_col 3 from date_tab 4 order by sessiontimezone, tsltz_col; SESSIONTIMEZONE TSLTZ_COL ----------------- ------------------------------------------------- -05:00 01-DEC-2009 20:00:00.000000 -05:00 30-NOV-2009 20:00:00.000000 SQL>
날짜의 연산 |
날짜 데이터는 날짜나 숫자를 더하거나 빼는 등의 산술 연산이 가능하며, 가능한 날짜의 연산은 다음과 같다.
연산 | 결과 | 비고 |
---|---|---|
날짜 + 숫자 | 날짜 | 주어진 숫자(일 수)를 날짜에 더한다. |
날짜 - 숫자 | 날짜 | 날짜에서 주어진 숫자(일 수)를 뺀다. |
날짜 - 날짜 | 숫 자(일 수) | 하나의 날짜에서 다른 하나의 날짜를 뺀다. |
날짜 + 숫자/24 | 날짜 | 날짜에 시간을 더한다. |
NLS 환경값 확인 |
nls_database_parameters | 오라클 설치시에 영구적으로 결정된 값으로 변경불가 |
nls_instance_parameters | 명시적으로 설정된 parameter 값을 보여줌 초기화 parameter에 미리 결정되어 있는 값을 보여 줌 |
nls_session_parameters | 현재 session에서 실제로 적용되고 있는 nls parameter의 설정값을 확인 이는 v$nls_parameters와 동일한 값을 출력 |
'3. DB' 카테고리의 다른 글
[DB]구분자로 잘라서 가져오기(REGEXP_SUBSTR, SUBSTR+INSTR 2가지 방식) (0) | 2014.02.04 |
---|---|
[DB] JOIN 문 설명(LEFT JOIN,RIGHT JOIN,INNER JOIN,OUTER JOIN) (0) | 2014.01.14 |
[ORACLE] TO_CHAR 의 펑션.. (0) | 2013.12.26 |
레드햇 계정 리눅스에서 오라클 11 설치하기 (0) | 2010.08.27 |
[ORACLE] 오라클 유저 생성,권한주기, 유저 지우기 (0) | 2010.08.27 |
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Comments