SQL단일행 함수 - 변환함수

MIN.DI·2021년 5월 14일
0

SQL

목록 보기
2/17

1. 변환함수

TO_CHAR : 날짜나 숫자를 문자로 변환

출력 데이터 형식을 지정

>> TO_CHAR(날짜, 출력형식), TO_CHAR(숫자, 출력형식)

출력형식

  • YYYY : 네 자리로 표현된 년도 (1999, 2021, ...)
  • YY : 두 자리로 표현된 년도 (99, 21, ...)
    앞에 두 자리는 현재 년도를 이용
    2021년 현재 99년을 YY로 표현하면 2099년을 의미
  • RR : 두 자리로 표현된 년도.
    2021년 현재 99년을 RR로 표현하면 1999년을 의미.

  • MM : 두자리 숫자로 표현된 월 (01, 02, ...)
  • MONTH : 영문이나 한글로 표현된 월 (MARCH, APRIL, 3월, 4월, ...)
    소문자'month'로 작성하면 월 조회도 소문자로 조회된다. (march, april, ...)
  • MON : 약자로 표현된 영문 및 한글 월 (MAR, APR, 3월, 4월, ...)

  • W : 이번 달의 몇번째 주인지
  • WW : 이번 년의 몇번째 주인지

  • D : 이번 주의 몇번째 일자인지
  • DD : 두 자리 숫자로 표현된 일자 (01, 02, ...)
  • DDD : 이번 년의 몇번째 일자인지

  • DAY : 영문이나 한글 요일(SUNDAY, MONDAY, 일요일, 월요일, ...)
  • DY : 약자로 표현된 요일 (SUN, MON, 일, 월, ...)


  • HH24 : 1~24시로 표현
  • HH : 1~12시로 표현. 정확한 표현을 위해 AM/PM 을 추가하는 것이 좋다.
  • MI : 두자리 분 표시
  • SS : 두자리 초 표시
  • SSSSS : 하루를 초로 환산하여 표현


  • AM / PM : 오전 / 오후 표기

TO_DATE : 데이터를 날짜형으로 해석

>> TO_DATE(문자, 해석형식)

TO_NUMBER : 데이터를 숫자로 해석

대부분의 경우 오라클의 자동 형 변환에 의해 숫자로 읽을 수 있는 문자는 숫자로 자동 형변환 되므로 사용 빈도가 낮음
SQL보다는 PLSQL 등에서 쓰임.
숫자로 변경시 앞에 공백 1자리가 생기는데, 이는 양의 부호(+)가 생략되면서 생겨난 자리이다.
이 공백을 제거하기 위해 FM 명령어를 쓴다.


EXERCISE 1

현재 날짜를 다양한 형식으로 출력

SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD') 날짜1
      ,TO_CHAR(SYSDATE, 'YYYYMMDD') 날짜2
      ,TO_CHAR(SYSDATE, 'YYYY/MM/DD:HH24:MI:SS') 날짜3           
      ,TO_CHAR(SYSDATE, 'YYYYMMDD:HH24:MI:SS') 날짜4
      ,TO_CHAR(SYSDATE, 'YYYY/MM/DD:HH:MI:SS AM') 날짜5
FROM DUAL; 

SELECT TO_CHAR(SYSDATE, 'DD Month YYYY') 오늘 FROM DUAL;

SELECT TO_CHAR(SYSDATE, 'DAY Mon YY') TODAY FROM DUAL;

SELECT TO_CHAR(SYSDATE, '"오늘은 "YYYY"년 "MM"월 "DD"일 입니다."') 날짜 FROM DUAL;   
EXERCISE 2

10번 부서 사원의 입사일을 다음의 형식으로 검색한다
'XXX 사원의 입사일은 XXXX년 XX월 XX일입니다.'

  SELECT ENAME || ' 사원의 입사일은 ' ||
       TO_CHAR(HDATE, 'YYYY"년 "MM"월 "DD"일 입니다."') 입사일
FROM EMP
WHERE DNO = '10';
EXERCISE 3

다양한 형식으로 숫자를 출력해보자

  SELECT TO_CHAR(12345.678, '999,999.9999') NUM FROM DUAL;

SELECT TO_CHAR(12345.678, '099,999.9999') NUM FROM DUAL;
EXCERCISE4

10번 부서 사원의 보너스가 급여의 몇 퍼센트인지 검색
급여는 월간 급여, 보너스는 연간 보너스, 보너스가 NULL인경우 0으로 환산

SELECT ENO, ENAME
	   ,TO_CHAR(NVL(COMM, 0)/(SAL*12)*100 , '00.99') 
	    || '%' 보너스비욜
FROM EMP
WHERE DNO = '10';
EXERCISE 5

1992년 이전에 입사한 사원의 정보 검색

SELECT ENO  사번, ENAME 이름, HDATE 입사일
FROM EMP
WHERE HDATE< TO_DATE('19920101', 'YYYYMMDD');

  1. 학생의 평균 평점을 다음 형식에 따라 소수점 이하 두 자리까지 검색
    'XXX 학생의 평균 평점은 X.XX입니다.'
SELECT SNAME || ' 학생의 평균 평점은 ' || TO_CHAR(AVR, '0.99') || '입니다.'
FROM STUDENT;                     
  1. 3월에 부임한 교수의 명단 검색
SELECT *
FROM PROFESSOR
WHERE TO_CHAR(HIREDATE, 'MM') = '03';                                
  1. 화학과 1학년 학생들의 4.5 환산 평점을 다음 형식에 따라 소수점 이하 두자리까지 검색
    'XXX 학생의 4.5환산 평점은 X.XX입니다.'
SELECT SNAME || ' 학생의 4.5 환산 평점은 ' || TO_CHAR(AVR, '0.99') || '입니다.'
FROM STUDENT;
profile
내가 보려고 쓰는 블로그

0개의 댓글