데이터베이스/Oracle SQL

오라클 SQL과 PL/SQL ( 형 변환 함수 )

동띠기 2021. 7. 15. 00:11

오라클에서 사용하는 데이터 타입을을 살펴보면 아래와 같다.

 

CHAR(n) 고정길이의 문자를 저장. 최대값은 2000바이트
VARCHAR2(n) 변하는 길이의 문자를 저장. 최대값은 4000바이트
NUMBER(p.s) 숫자 값을 저장. P는 전체 자릿수로 1~38자리까지 가능하고, S는 소수점 이하 자릿수로 -84~127자리까지 가능
DATE 총 7바이트로 BC 4712년 1월 1일부터 AD 9999년 12월 31일까지 날짜를 저장할 수 있다.
LONG 가변 길이의 문자를 저장. 최대 2GB까지 저장
CLOB 가변 길이의 문자를 저장. 최대 4GB까지 저장
BLOB 가변 길이의 바이너리 데이터를 저장. 최대 4GB까지 저장
RAW(n) 원시 이진 데이터로 2000바이트 저장
LONG RAW(n) 원시 이진 데이터로 2GB 까지 저장
BFILE 외부 파일에 저장된 데이터로 최대 4GB 저장

오라클에서 형변환은 묵시적 형변환과 명시적 형 변환으로 나눌 수 있다.

 

묵시적 형변환 / 명시적 형 변환
묵시적 = 자동 / 오라클이 자동으로 형 변환 시킨다는 뜻
명시적 = 수동 / 사람이 수동으로 지정해 주어야 한다는 의미

숫자 + 문자

숫자 2와 문자 '2'를 계산하라고 요쳥하였더니 자동으로 숫자 4로 연산이 됩니다.
원래 숫자와 문자를 연산할 수 없어서 에러를 발생시키지만 숫자처럼 생긴 문자는 자동으로 숫자로 바꾼 후 연산을 수행합니다.

숫자 + 문자 에러

 

명시적형변환의 함수는 
TO_CHAR / TO_NUMBER / TO_DATE 이렇게 3가지로 나누어진다.
TO_CHAR은 숫자와 날짜를 문자로 변환해 주는 두가지 기능을 가지고 있다.


TO_CHAR(날짜 -> 문자)

 

오라클이 날짜를 표현하는 방법은 아래와 같다.

 

YYYY -  연도 4자리
RRRR - 2000년 이후 Y2K 버그로 인해 등장한 날짜 표기법으로 연도 4자리 표기법
YY - 연도 마지막 2자리
RR - 연도 마지막 2자리
YEAR - 연도의 영문 이름 전체 출력


MM - 월 2자리
MON - 유닉스용 오라클에서 월을 뜻하는 영어 3글자로 표시 ( OCT )
MONTH - 월을 뜻하는 이름 전체 표시


DD - 일 숫자 2자리
DAY - 요일에 해당하는 명칭을 표시 , 유닉스용 오라클에서는 영문으로 나오고 윈도우는 한글로 표시
DDTH - 몇 번째 날인지 표시


HH24 - 하루를 24시간으로 표현
HH - 하루를 12시간으로 표시

M - 분
SS - 초

 


문제 1.

STUDENT 테이블의 BIRTHDAY 컬럼을 사용하여 생일이 1월인 학생의 이름과 BIRTHDAY를 아래와 같이 출력하라

 

본인 풀이 :

 

SELECT STUDNO, NAME, TO_CHAR(BIRTHDAY, 'YY-MM-DD') "BIRTHDAY" 
FROM STUDENT 
WHERE SUBSTR(BIRTHDAY, 4, 2) = '01';

 

문제 2.

EMP 테이블의 HIREDATE 컬럼을 사용하여 입사일이 1,2, 3월인 사람들의 사번과 이름, 입사일을 출력하세요.

본인 풀이 : 

 

SELECT EMPNO, ENAME, TO_CHAR(HIREDATE, 'YY/MM/DD') "HIREDATE" 
FROM EMP 
WHERE SUBSTR(HIREDATE, 4, 2) < '04';

728x90