- 묵시적 형 변환 : 오라클이 자동으로 변환함
select 1+'1' from dual; //실행 됨. 그러나 성능 취약
select 1+'a' from dual; //오류 발생. invalid number
- 명시적 형 변환 : 수동 형 변환
1) to_char() : 숫자나 날짜 형을 지정된 형식에 맞도록 문자열로 변경하는 함수.
- 날짜를 문자열로 변경
날짜 형식 문자 :
yyyy : 연도를 4자리로 표시
yy : 연도를 2자리로 표시
rrrr : 2000년 이후에 Y2K버그로 인해 추가된 연도 4자리로 표시
rr : 2000년도 이후에 Y2K버그로 인해 추가된 연도 2자리로 표시.
year : 영문으로 년도 표시. (문자로 연도 표시)
mm : 월을 2자리로 표시.
mon : 영문표시할 때의 약자 표시. FBE 한글은 상관없다.
month : 영문표시 할때의 전체 월 표시. 한글은 상관 없다.
dd : 일을 2자리로 표시.
day : 요일을 표시.
ddth : 몇번째 날짜인지 표시.
예시 :
select to_char(sysdate,'yyyy') 년도1,to_char(sysdate,'rrrr')년도2,
to_char(sysdate,'year') 년도3,to_char(sysdate,'rr') 년도4,to_char(sysdate,'mm') 월1,
to_char(sysdate,'mon') 월2, //약자 표시
to_char(sysdate,'month') 월3, to_char(sysdate,'dd') 일1, //일자표시
to_char(sysdate,'day') 일2, //요일표시
to_char(sysdate,'ddth') 일3, //서수표시
to_char(sysdate,'hh') 시간1, //1~12 시
to_char(sysdate,'hh24') 시간2, //0~24 시
to_char(sysdate,'mi') 분1, to_char(sysdate,'ss') 초1,
to_char(sysdate,'am') am //오전,오후
from dual;
시간 :
hh : 하루 12시간.
hh24 : 하루 24시간.
mi : 분.
ss : 초.
am : 오전/오후.
예시 :
select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss am day') from dual;
문제 :
1. 학생의 이름과 생일(birthday)을 yyyy-mm-dd 요일 형식으로 출력하기
select name,to_char(birthday,'yyyy-mm-dd day') birthday from student;
- 숫자를 형식화 된 문자열로 변경
to_char(숫자,'형식문자')
예시 :
select to_char(1234.56,'9999999') 숫자1, //정수 7자리. 반올림
to_char(1234,56,'0999999') 숫자2, //정수 7자리 빈자리 0으로 채움.
앞자리에 0이 들어가면 유효하지 않은 숫자
to_char(12.3456,'$9999.99') 숫자3, //$표시. 소숫점 이하 2자리 출력
to_char(12.3456,'9999.99') 숫자4, //소숫점 이하 2자리 출력
to_char(1234.56,'9,999.99') 숫자5 //세자리마다 , 표시하고 소숫점 이하 2자리 출력
from dual;
문제 :
1. 교수의 이름,현재급여,연봉 출력하기.
단 연봉은 급여*12이고, 출력시 세자리마다 , 표시하기
select name,pay,to_char(pay*12,'99,999') 연봉 from professor;
2) to_number : 문자 → 숫자형
예시 :
select '12'+10 from dual; //묵시적 형변환
select to_char('12')+10 from dual; //명시적 형변환
3) to_date : : 문자 → 날짜형
예시 :
1. '20220816'을 날짜형태로 변환.
select to_date('20220816','yyyymmdd') from dual;
2. '20220817'날짜를 '2022-08-17 수요일' 형태로 변환.
select to_char(to_date('20220817','yyyymmdd'),'yyyy-mm-dd day') from dual;
문제 :
1. 교수테이블에서 입사일 2개월 후 다음달 1일을 정식입사일로 한다.
교수의 이름,입사일,정식입사일을 출력하기. 단 정식입사일의 요일도 표시하기
select name,hiredate,
to_char(last_day(add_months(hiredate,2))+1,'yyyy-mm-dd day') 정식입사일
from professor;
'수업(국비지원) > Oracle' 카테고리의 다른 글
| [Oracle] SQL 복수행 함수(그룹함수) - count 함수, sum함수, avg함수 (0) | 2023.04.14 |
|---|---|
| [Oracle] SQL 단일행 함수 - 일반 함수 nvl(), decode(), case 구문 (0) | 2023.04.14 |
| [Oracle] SQL 단일행 함수 - 날짜 관련 함수 sysdate, months_between, add_months, next_day, last_day (0) | 2023.04.14 |
| [Oracle] SQL 단일행 함수 - 숫자 함수 round, trunc, mod, ceil, floor, power, abs, sign (0) | 2023.04.14 |
| [Oracle] SQL 단일행 함수 - 문자 함수(문자열 치환 함수) replace (0) | 2023.04.14 |