단일행함수-변환함수
<날짜 출력 형식>
- 년
YYYY : 네자리 연도표기 (1999,2000)
YY : 두자리로 표현된 년도. 앞의 두자리는 현재 세기의 년도를 이용한다. ******99년은 2099년을 의미한다.
RR : 두자리로 표현된 년도. 앞의 두자리는 현재년도와 가까운 년도를 이용한다. ********* 99년은 1999년 20년은 2020년 - 월
MM : 두자리 표현
MONTH : 영문이나 한글로 표현된 월 (MARCH, APRIL, 2월)
MON : 약자로 표현된 영문및 한글 월 (MAR, APR, 2월) 한글 경우에는 MONTH와 동일 - 일
DD : 숫자일자
DAY : 영문이나 한글 요일
DY : 약자로 표현된 요일(SUN MON 월, 일) - 시
HH24 : 24시기준
HH : 1-12 AM/PM - 분
MI : 두자리 분 표시 - 초
SS : 두자리 초표시
SSSS : 하루를 초로 환산한다음 표현 (0-86399) - 오전/오후: AM/PM
<숫자출력형식>
- 9 : 숫자의 출력 폭 지정(자리수가 부족하면 생략)
- 0 : 선행 0표기
- $ : 화페표기 (달러)
- L : 지역 화폐 표기 (각 국가코드에 따라 다름)
- , : 쉼표위치지정
- . : 마침표 위치지정
- MI : 음수의 - 기호를 오른쪽에 표기
- EEEE : 실수 표현법을 이용
<변환함수>
- TO_CHAR : 날짜나 숫자를 문자로 변환한다. 출력데이터 형식을 지정한다 (출력포맷)
예) TO_CHAR(날짜, 출력형식)
TO_CHAR(숫자, 출력형식) - TO_DATE : 데이터를 날짜 형식으로 해석한다.
예) TO_DATE(문자, 해석형식) - TO_NUMBER : 데이터를 숫자로 해석한다. 대부분의 경우 오라클의 자동형변환에 의해 숫자문자는 자동변환됨으로 잘쓰이지 않음. PL-SQL에서 가끔 사용됨
<Exercise>
--현재날짜를 다양한 방식으로 출력
SELECT TO_CHAR(sysdate, 'YYYY/MM/DD') "date",
TO_CHAR(sysdate, 'YYYY/MM/DD:HH24:MI:SS') "date",
TO_CHAR(sysdate, 'YY/MM/DD:HH:MI:SS AM') "date"
FROM dual;
SELECT TO_CHAR(sysdate, 'DD MONTH YYYY') ToDay
FROM dual;
SELECT TO_CHAR(sysdate, 'DAY MON YY') ToDay
FROM dual;
SELECT TO_CHAR(sysdate, 'DY Mon YY') ToDay
FROM dual;
SELECT TO_CHAR(sysdate, '"오늘은 " YYYY "년" MM "월 " DD "일 입니다" ') ToDay
FROM dual;
--10번 부서 사원의 입사일을 다음의 형식으로 검색
-- ***사원의 입사입은 ****년 **월 **일입니다
SELECT ename || ' 사원의 입사일은 ' || TO_CHAR(hdate, 'YYYY"년 " MM"월 "DD"일 입니다." ')
FROM emp
WHERE dno = '10';
--다양한 형식으로 숫자 출력
SELECT TO_CHAR(12345.678, '999,999.99999') num
FROM dual;
SELECT TO_CHAR(12345.678, '999,999.999') num
FROM dual;
SELECT TO_CHAR(12345.678, '9,9999.9') num
FROM dual;
SELECT TO_CHAR(12345.678, '9,999.9') num
FROM dual;
SELECT TO_CHAR(1234, '$999,999') num
FROM dual;
SELECT TO_CHAR(1234, 'L999,999') num
FROM dual;
SELECT TO_CHAR(-1234, '999,999MI') num
FROM dual;
SELECT TO_CHAR(123456789, '9.999EEEE') num
FROM dual;
-- 10번 부서의 사원의 보너스가 급여의 몇 퍼센트인지 검색한다
-- 급여는 월간, 보너스는 연간
SELECT eno, ename,
TO_CHAR(NVL(comm,0)/(sal*12)*100, '99')||'%' 급여비율
FROM emp
WHERE dno='10';
--1992년 이전에 입사한 사원의 정보를 검색하자
SELECT eno, ename, hdate
FROM emp
WHERE hdate < TO_DATE('1992/01/01', 'YYYY/MM/DD');
SELECT eno, ename, hdate
FROM emp
WHERE hdate < '1992/01/01';
-- 이경우 세션의 출력형식이 달라질 시(99/01/01. 1992_02_01)
-- 비교가 불가능해지므로 TO_DATE 함수를 사용하는 것을 권장한다.
--1. 학생의 평균 평점을 다음 형식에 따라 소수점 이하 두 자리까지 검색한다
-- 'XXX 학생의 평균 평점은 x.xx입니다.'
SELECT sname || ' 학생의 평균 평점은' || TO_CHAR(avr, '999.99') ||' 입니다.'
FROM student;
--2. 교수의 다음 형식으로 부임일을 검색한다
-- 'XXX 교수의 부임일은 YYYY년 MM월 DD일입니다.'
SELECT pname ||' 교수의 부임일은 '|| TO_CHAR(hiredate, 'YYYY"년" MM"월" DD"일입니다."')
FROM professor;
--3. 교수 중에 3월에 부임한 교수의 명단을 검색한다.
SELECT pno, pname, section, hiredate
FROM professor
WHERE TO_CHAR(hiredate, 'MM')='03';
'db : sql' 카테고리의 다른 글
Oracle/ 그룹함수와 HAVING절 (0) | 2020.02.26 |
---|---|
Oracle/ 단일행함수 - 숫자, 날짜형 함수 (0) | 2020.02.26 |
Oracle/ 단일행함수 - 문자함수 (0) | 2020.02.25 |
Oracle/ 좌우외부조인 & 교차조인 (0) | 2020.02.25 |
Oracle/ ON절을 이용한 조인 (0) | 2020.02.25 |