본문 바로가기

데이터베이스(DB)/Oracle
[Oracle] 변환 함수

// 변환 함수

- 숫자 <-> 문자열 <-> 날짜


// NUMBER 형식을 문자열(VARCHAR2)로 변환 : TO_CHAR(NUMBER)

 

포맷 문자 설명
9 숫자 1개를 문자 1개로 바꾸는 역할 > 빈자리를 스페이스로 치환 ≒ %5d > 부호 자리 한 자리를 비움
0 숫자 1개를 문자 1개로 바꾸는 역할 > 빈자리를 0으로 치환 ≒ %05d > 부호 자리 한 자리를 비움
$, L 통화 기호 표현
, 천 단위 구분자 표시
. 소수점 표시
SELECT TO_CHAR(123) || 'HELLO' FROM DUAL; -- 123HELLO

SELECT TO_CHAR(12345678, '99,999,999') || 'HELLO' FROM DUAL; -- 12,345,678HELLO

SELECT TO_CHAR(12345678, '099,999,999') || 'HELLO' FROM DUAL; -- 012,345,678HELLO

SELECT TO_CHAR(12345678.34, '099,999,999.99') || 'HELLO' FROM DUAL; --012,345,678.34HELLO

SELECT TO_CHAR(12345678.34567, '099,999,999.99') || 'HELLO' FROM DUAL; --012,345,678.35HELLO

select  
    weight,
    '@' || to_char(weight) || '@',
    '@' || to_char(weight, '99999') || '@',
    '@' || to_char(weight, '00000') || '@',
    '@' || to_char(-weight, '99999') || '@',
    '@' || to_char(-weight, '00000') || '@'
from tblComedian;

select 
    100,
    to_char(100, '$999'),
    to_char(100, 'L999') --원화
from dual;

select
    1234567.89,
    to_char(1234567.89, '9,999,999.9')
from dual;

// DATE 형식을 문자열(VARCHAR2)로 변환 : TO_CHAR(DATETIME)

포맷 문자 설명
YYYY/RRRR/YY/YEAR 년도 표시 : 4자리/Y2K/2자리/영문
MM/MON/MONTH 월 표시 : 2자리/영문 3자리/영문 전체
DD/DAY/DDTH 일 표시 : 2자리/영문/2자리ST
AM/PM 오전/오후 표시
HH/HH24 시간 표시 : 12시간/24시간
MI 분 표시 : 0~59분
SS 초 표시 : 0~59초
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

select 
    sysdate,
    to_char(sysdate, 'yyyy-mm-dd'),
    to_char(sysdate, 'hh24:mi:ss'),
    to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'),
    to_char(sysdate, 'day am hh:mi:ss')
from dual;

select
    name,
    ibsadate,
    to_char(ibsadate, 'yyyy-mm-dd') as hire_date,
    to_char(ibsadate, 'day') as day,
    case
        when to_char(ibsadate, 'd') in('1', '7') then '휴일 입사'
        else '평일 입사'
    end
from tblInsa;

select * from tblInsa
    where to_char(ibsadate, 'yyyy') = '2000';

// 문자열을 날짜 형식으로 변환 : TO_DATE(문자열, 날짜포맷), TO_TIMESTAMP(문자열)

SELECT TO_DATE('2023-02-19') FROM DUAL; -- 23/02/19

SELECT TO_DATE('2023-02-19 11:04:50', 'YYYY-MM-DD HH:MI:SS') FROM DUAL; -- 23/02/19

SELECT TO_TIMESTAMP('2023-02-19 23:04:50', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; 
-- 23/02/19 23:04:50.000000000

select
    sysdate,
    '2023-03-16',
    to_date('2023-03-16') as time1, 
    to_date('2023-03-16' , 'yyyy-mm-dd') as time2,
    to_date('20230316') as time3,
    to_date('20230316', 'yyyy-mm-dd') as time4,
    to_date('2023/03/16') as time5,
    to_date('2023/03/16', 'yyyy/mm/dd') as time6,
    to_date('2023-03-16 15:28:25', 'yyyy-mm-dd hh24:mi:ss') as time7 --*******
from dual;

select * from tblInsa
    where ibsadate between to_date('2000-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') 
        and to_date('2000-12-31 23:59:59', 'yyyy-mm-dd hh24:mi:ss');

// 문자열을 숫자 형식으로 변환 : TO_NUMBER(문자열)

SELECT TO_NUMBER('1994') FROM DUAL; --1994

SELECT TO_NUMBER('2') + 3 FROM DUAL; --5

select 
    123 * 2,
    to_number('123') * 2,
    '123' * 2
from dual;

'데이터베이스(DB) > Oracle' 카테고리의 다른 글

[Oracle] 집계 함수, Group by절, Having절  (0) 2023.02.20
[Oracle] NULL 관련 함수, DECODE 함수  (0) 2023.02.19
[Oracle] 날짜 시간 함수  (0) 2023.02.18
[Oracle] 숫자 함수  (0) 2023.02.17
[Oracle] 문자열 함수  (0) 2023.02.16