IT STUDY LOG

[Oracle] 단일 행 함수 - 변환 함수 본문

computer science/database

[Oracle] 단일 행 함수 - 변환 함수

roheerumi 2023. 8. 30. 14:34

# 암시적 변환

||, LIKE 명령어, 문자 함수 

SELECT '500', 300, '500' + 300 
  FROM dual; 

SELECT * 
  FROM emp 
  WHERE deptno = '20'; -- 숫자 컬럼이나 암시적으로 변환 

SELECT * 
  FROM emp 
  WHERE hiredate = '81/09/08'; -- 문자값을 날짜값으로 암시적으로 변환

   

# 명시적 변환 

TO_CHAR 

- 숫자나 날짜 데이터를 문자 데이터로 변환 

SELECT SYSDATE, TO_CHAR(SYSDATE), 123450000, TO_CHAR(123450000) 
  FROM dual;

 

숫자 -> 문자 포맷팅 

SELECT empno, sal * 100 * 12 
  , TO_CHAR(sal * 100 * 12, 'L999,999,999.9') "숫자 포맷 지정"  
  , TO_CHAR(sal * 100 * 12, '$099,999,999.99') "0포맷 지정" -- 0 포맷 지정  
  FROM emp; 

SELECT TO_CHAR(-1234, '999,999mi') "음수1", TO_CHAR(-1234, '999,999pr') "음수2"-- 음수 포맷팅 
  , TO_CHAR(1234, '999,999mi') "양수1", TO_CHAR(1234, '999,999pr') "양수2"-- 양수 포맷팅 
  FROM dual;

 

날짜 -> 문자 포맷팅 

SELECT SYSDATE 
  , TO_CHAR(SYSDATE, 'yyyymmdd') "날짜 포맷1"  
  , TO_CHAR(SYSDATE, 'yyyy/mm/dd') "날짜 포맷2" 
  , TO_CHAR(SYSDATE, 'yyyy-mm-dd AM PM hh12:mi:ss') "날짜 포맷3" -- AM, PM 무관 
  , TO_CHAR(SYSDATE, 'yyyy.mm.dd hh24:mi:ss') "날짜 포맷4" 
  FROM dual; 

SELECT SYSDATE 
  , TO_CHAR(SYSDATE, 'MONTH Month month') "mon1"  
  , TO_CHAR(SYSDATE, 'MON Mon mon') "mon2" 
  FROM dual; 

SELECT SYSDATE 
  , TO_CHAR(SYSDATE, 'yyyy month dd')   
  FROM dual; 

SELECT SYSDATE 
  , TO_CHAR(SYSDATE, 'DAY Day day') 
  , TO_CHAR(SYSDATE, 'DY Dy dy')   
  FROM dual; 

SELECT SYSDATE, TO_CHAR(SYSDATE, 'Q WW W') -- 분기, 일년 중의 주, 한달 중의 주 
  FROM dual; 
  
SELECT SYSDATE, TO_CHAR(SYSDATE, 'DDD DD D') -- 일년 중의 일, 한달 중의 일, 한주 중의 일(일요일 첫째날 기준) 
  FROM dual; 

SELECT ename, hiredate 
  , TO_CHAR(hiredate, 'yyyy')||'년 '||TO_CHAR(hiredate, 'mm')||'월 '||TO_CHAR(hiredate, 'dd')||'일' "날짜 변환1" 
  , TO_CHAR(hiredate, 'yyyy"년" mm"월" dd"일"') "날짜 변환2" 
  FROM emp;

 

TO_DATE 

- 숫자나 문자 데이터를 날짜 데이터로 변환, SELECT문의 WHERE절에 주로 사용 

-- 연도 포맷팅시 yy보다 yyyy(세기 특정) 사용하기를 권장  
SELECT ename, hiredate, TO_DATE('12월 17 1980', 'mm"월" dd yyyy') 
  FROM emp 
  -- WHERE hiredate = '80-12-17'; 
  -- WHERE hiredate = TO_DATE('12월 17 1980', 'mm"월" dd yyyy'); 
  WHERE hiredate = TO_DATE('19801217', 'yyyymmdd');

 

시분초를 포함한 날짜 비교 방법  

① 범위 지정 

SELECT ename, TO_CHAR(hiredate, 'yyyy-mm-dd hh24:mi:ss') 
  FROM emp 
  WHERE hiredate >= TO_DATE('1981/12/03') 
  AND hiredate < TO_DATE('1981/12/04');

  

② TRUNC 함수 활용 

SELECT ename, TO_CHAR(hiredate, 'yyyy-mm-dd hh24:mi:ss') 
  FROM emp 
  WHERE TRUNC(hiredate, 'dd') = TO_DATE('1981/12/03');

   

③ TO_CHAR 활용 

SELECT ename, TO_CHAR(hiredate, 'yyyy-mm-dd hh24:mi:ss "("day")"') 
  FROM emp 
  -- WHERE TO_CHAR(hiredate, 'dd') = '02'; 
  -- WHERE TO_CHAR(hiredate, 'day') = '금요일'; 
  -- WHERE TO_CHAR(hiredate, 'yyyymmdd') = '19811203'; 
  WHERE TO_CHAR(hiredate, 'yyyy.mm.dd') = '1981.12.03';

 

TO_NUMBER 

- 문자나 날짜 데이터를 숫자 데이터로 변환 

 

   

Comments