본문 바로가기

[오라클 레퍼런스 함수] TO_CHAR (datetime) - 날짜 및 시간 데이터를 지정한 형식으로 변환

by ㅇㅍㅍ 2023. 8. 29.
[오라클 레퍼런스 함수] TO_CHAR (datetime) - 날짜 및 시간 데이터를 지정한 형식으로 변환
728x90

 

TO_CHAR (datetime)

 

구문

TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])

 

목적

TO_CHAR (datetime) 함수는 DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE, INTERVAL DAY TO SECOND, 또는 INTERVAL YEAR TO MONTH 데이터 유형의 날짜 또는 간격(interval) 값을, 날짜 형식 fmt으로 지정한 형식의 VARCHAR2 데이터 유형으로 변환합니다. fmt를 생략하면 다음과 같이 dateVARCHAR2 값으로 변환됩니다:

  • DATE 값은 기본 날짜 형식의 값으로 변환됩니다.
  • TIMESTAMPTIMESTAMP WITH LOCAL TIME ZONE 값은 기본 타임스탬프 형식의 값으로 변환됩니다.
  • TIMESTAMP WITH TIME ZONE 값은 기본 타임스탬프와 타임 존 형식의 값으로 변환됩니다.
  • 간격 값은 간격 리터럴의 숫자 표현으로 변환됩니다.

datetime 형식에 대한 정보는 "Format Models"을 참조하십시오.

'nlsparam' 인수는 월과 요일 이름 및 약어가 반환되는 언어를 지정합니다. 이 인수는 다음 형식을 가질 수 있습니다.

'NLS_DATE_LANGUAGE = language'

 

'nlsparam'을 생략하면 이 함수는 세션의 기본 날짜 언어를 사용합니다.

 

참고:

"Security Considerations for Data Conversion"

 

XML 함수 중 하나와 함께 사용하여 XML 스키마 표준 형식이 아니라 데이터베이스 형식으로 날짜를 생성할 수 있습니다.

 

참고:

  • XML 날짜 및 타임스탬프 형식, 포함된 예제 등에 대한 정보는 Oracle XML DB Developer's Guide를 참조하십시오.
  • XML 함수 목록은 "XML Functions"를 참조하십시오.
  • 암묵적 변환에 대한 자세한 내용은 표 2-8을 참조하십시오.
  • Oracle Database Globalization Support Guide의 부록 C는 문자 반환 값에 할당된 콜레이션을 정의하는 정렬 결정 규칙(collation derivation rules)에 대한 정보를 제공합니다.

 

예제

다음 예제는 다음 테이블을 사용합니다:

CREATE TABLE date_tab (
   ts_col      TIMESTAMP,
   tsltz_col   TIMESTAMP WITH LOCAL TIME ZONE,
   tstz_col    TIMESTAMP WITH TIME ZONE);

 

이 예제는 TO_CHAR를 다른 TIMESTAMP 데이터 유형에 적용한 결과를 보여줍니다. TIMESTAMP WITH LOCAL TIME ZONE 열의 결과는 세션 시간대에 민감하며 TIMESTAMPTIMESTAMP WITH TIME ZONE 열의 결과는 세션 시간대에 민감하지 않습니다.

ALTER SESSION SET TIME_ZONE = '-8:00';
INSERT INTO date_tab VALUES (  
   TIMESTAMP'1999-12-01 10:00:00',
   TIMESTAMP'1999-12-01 10:00:00',
   TIMESTAMP'1999-12-01 10:00:00');
INSERT INTO date_tab VALUES (
   TIMESTAMP'1999-12-02 10:00:00 -8:00', 
   TIMESTAMP'1999-12-02 10:00:00 -8:00',
   TIMESTAMP'1999-12-02 10:00:00 -8:00');

SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS ts_date,
   TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM') AS tstz_date
   FROM date_tab
   ORDER BY ts_date, tstz_date;
 
TS_DATE                        TSTZ_DATE
------------------------------ -------------------------------------
01-DEC-1999 10:00:00.000000    01-DEC-1999 10:00:00.000000 -08:00
02-DEC-1999 10:00:00.000000    02-DEC-1999 10:00:00.000000 -08:00

SELECT SESSIONTIMEZONE, 
   TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz
   FROM date_tab
   ORDER BY sessiontimezone, tsltz;

SESSIONTIM TSLTZ
---------- ------------------------------
-08:00     01-DEC-1999 10:00:00.000000
-08:00     02-DEC-1999 10:00:00.000000

ALTER SESSION SET TIME_ZONE = '-5:00';
SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS ts_col,
   TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM') AS tstz_col
   FROM date_tab
   ORDER BY ts_col, tstz_col;
 
TS_COL                         TSTZ_COL
------------------------------ -------------------------------------
01-DEC-1999 10:00:00.000000    01-DEC-1999 10:00:00.000000 -08:00
02-DEC-1999 10:00:00.000000    02-DEC-1999 10:00:00.000000 -08:00

SELECT SESSIONTIMEZONE,
TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz_col
   FROM date_tab
   ORDER BY sessiontimezone, tsltz_col;
  2    3    4
SESSIONTIM TSLTZ_COL
---------- ------------------------------
-05:00     01-DEC-1999 13:00:00.000000
-05:00     02-DEC-1999 13:00:00.000000

 

다음 예제는 간격 리터럴을 텍스트 리터럴로 변환하는 예입니다:

 

SELECT TO_CHAR(INTERVAL '123-2' YEAR(3) TO MONTH) FROM DUAL;

TO_CHAR
-------
+123-02

 

TO_CHAR를 사용하여 날짜와 숫자를 형식화하는 예제

다음 문은 TO_CHAR 함수에서 지정한 형식으로 날짜 값을 변환합니다:

WITH dates AS (  
  SELECT date'2015-01-01' d FROM dual union  
  SELECT date'2015-01-10' d FROM dual union  
  SELECT date'2015-02-01' d FROM dual 
)  
SELECT d "Original Date", 
       to_char(d, 'dd-mm-yyyy') "Day-Month-Year",  
       to_char(d, 'hh24:mi') "Time in 24-hr format",  
       to_char(d, 'iw-iyyy') "ISO Year and Week of Year" 
FROM dates;

 

다음 문은 TO_CHAR 함수에서 지정한 형식으로 날짜 및 타임스탬프 값을 변환합니다.

WITH dates AS (  
  SELECT date'2015-01-01' d FROM dual union  
  SELECT date'2015-01-10' d FROM dual union  
  SELECT date'2015-02-01' d FROM dual union 
  SELECT timestamp'2015-03-03 23:44:32' d FROM dual union  
  SELECT timestamp'2015-04-11 12:34:56' d FROM dual   
)  
SELECT d "Original Date", 
       to_char(d, 'dd-mm-yyyy') "Day-Month-Year",  
       to_char(d, 'hh24:mi') "Time in 24-hr format",  
       to_char(d, 'iw-iyyy') "ISO Year and Week of Year", 
       to_char(d, 'Month') "Month Name", 
       to_char(d, 'Year') "Year"  
FROM dates;

 

다음 문은 입력 날짜 및 시간 표현식에서 EXTRACT 함수에서 지정한 datetime 필드를 추출합니다.

WITH dates AS (   
  SELECT date'2015-01-01' d FROM dual union   
  SELECT date'2015-01-10' d FROM dual union   
  SELECT date'2015-02-01' d FROM dual union   
  SELECT timestamp'2015-03-03 23:44:32' d FROM dual union   
  SELECT timestamp'2015-04-11 12:34:56' d FROM dual    
)   
SELECT extract(minute from d) minutes,  
       extract(hour from d) hours,  
       extract(day from d) days,  
       extract(month from d) months,  
       extract(year from d) years  
FROM dates;

 

다음 문은 TO_CHAR 함수에서 지정한 형식대로 입력된 숫자를 표시합니다.

WITH nums AS (  
  SELECT 10 n FROM dual union  
  SELECT 9.99 n FROM dual union  
  SELECT 1000000 n FROM dual  --one million  
)  
SELECT n "Input Number N",  
       to_char(n),  
       to_char(n, '9,999,999.99') "Number with Commas",  
       to_char(n, '0,000,000.000') "Zero-padded Number",  
       to_char(n, '9.9EEEE') "Scientific Notation"  
FROM nums;

 

다음 문은 TO_CHAR 함수에서 지정한 형식대로 입력된 숫자를 변환합니다.

WITH nums AS (  
  SELECT 10 n FROM dual union  
  SELECT 9.99 n FROM dual union  
  SELECT .99 n FROM dual union  
  SELECT 1000000 n FROM dual  --one million  
)  
SELECT n "Input Number N",  
       to_char(n),  
       to_char(n, '9,999,999.99') "Number with Commas", 
       to_char(n, '0,000,000.000') "Zero_padded Number",  
       to_char(n, '9.9EEEE') "Scientific Notation",  
       to_char(n, '$9,999,990.00') Monetary,  
       to_char(n, 'X') "Hexadecimal Value" 
FROM nums;

 

다음 문은 TO_CHAR 함수에서 지정한 형식대로 입력된 숫자를 변환합니다.

WITH nums AS (  
  SELECT 10 n FROM dual union  
  SELECT 9.99 n FROM dual union  
  SELECT .99 n FROM dual union  
  SELECT 1000000 n FROM dual  --one million  
)  
SELECT n "Input Number N",  
       to_char(n),  
       to_char(n, '9,999,999.99') "Number with Commas",  
       to_char(n, '0,000,000.000') "Zero_padded Number",  
       to_char(n, '9.9EEEE') "Scientific Notation",  
       to_char(n, '$9,999,990.00') Monetary,  
       to_char(n, 'XXXXXX') "Hexadecimal Value"  
FROM nums;

 

Live SQL: Oracle Live SQL에서 Using TO_CHAR to Format Dates and Numbers 예제를 보고 실행하실 수 있습니다.

 

TO_CHAR (datetime) 함수: 예제

다음 문은 empl_temp라는 테이블을 생성하고 직원 정보를 채우는 내용입니다.

CREATE TABLE empl_temp 
  ( 
     employee_id NUMBER(6), 
     first_name  VARCHAR2(20), 
     last_name   VARCHAR2(25), 
     email       VARCHAR2(25), 
     hire_date   DATE DEFAULT SYSDATE, 
     job_id      VARCHAR2(10), 
     clob_column CLOB 
  );

INSERT INTO empl_temp
VALUES(111,'John','Doe','example.com','10-JAN-2015','1001','Experienced Employee');

INSERT INTO empl_temp
VALUES(112,'John','Smith','example.com','12-JAN-2015','1002','Junior Employee');

INSERT INTO empl_temp
VALUES(113,'Johnnie','Smith','example.com','12-JAN-2014','1002','Mid-Career Employee');

INSERT INTO empl_temp
VALUES(115,'Jane','Doe','example.com','15-JAN-2015','1005','Executive Employee');

 

다음 문은 짧은 형식과 긴 형식을 사용하여 날짜를 표시합니다:

SELECT hire_date "Default",  
       TO_CHAR(hire_date,'DS') "Short",  
       TO_CHAR(hire_date,'DL') "Long"FROM empl_temp  
WHERE employee_id IN (111, 112, 115);

Default    Short      Long
---------- ---------- --------------------------
10-JAN-15  1/10/2015  Saturday, January 10, 2015
12-JAN-15  1/12/2015  Monday, January 12, 2015
15-JAN-15  1/15/2015  Thursday, January 15, 2015

 

Live SQL: Using the TO_CHAR Function에 대한 관련 예제를 Oracle Live SQL에서 확인하고 실행하세요.

 


출처: 오라클 레퍼런스

원문 링크: Oracle TO_CHAR (datetime) 함수 문서

 

반응형

댓글