221110 데이터 베이스 오라클 : 날짜와 숫자 자료
Oracle SQL - 숫자 자료, 날짜 자료
2) 숫자 자료 타입
. 정수 및 실수를 저장
. NUMBER타입 제공
. 저장범위 : 1.0 X 10^-130 ~ 9.99....99 X 10^125 (소수점이하 38자리까지 허용)
-- 제일 작은수 ~ 약 1.0 X 10^126
(사용형식)
컬럼명 NUMBER([정밀도|*][,스케일]) -- * : 1.0 X 10^-130 ~ 9.99....99 X 10^125 범위의 수 알아서 생성
. 정밀도 : 전체 자리수 의미(I ~ 30)
. 스케일 소숫점이하의 자리수
. 저장은 스케일이 양수인 경우 : '스케일 + 1'번째 자리에서 반올림하여 '스케일'자리까지 저장
스케일이 음수인 경우 : 정수 부분 '스케일' 위치에서 반얼림
. 정수부분이 데이터 보다 작으면 오류
. 스케일이 생략되면 0으로 간주
. 정밀도예 '*'가 사용되면 전체 크기를 시스템에게 위임하여 가장 효율적인 크기를 배정 받음
선언예)
컬럼명 NUMBER -- 사용자가 입력한 값을 그대로 저장한다.
컬럼명 NUMBER(*,3) -- * : 컴퓨터가 알아서 숫자 자리 처리함
컬럼명 NUMBER(6) -- 스케일값 생략 : 0 으로 간주/소숫점을 없앤다. =(6.0)
컬럼명 NUMBER(6,2) -- 일반적 사용 형태 : 소숫점이하3번째에서 반올림하고 정수부분은 4자리이다.
컬럼명 NUMBER(6,0)
컬럼명 NUMBER(6,-2)
--< 형 식 >
--NUMBER(10,2) : 12345.6789102
(소숫점 이하 순서 양수로 저장됨 : 123 / 양수는 소숫점 기준으로 음수순번)
-- -5-4-3-2-1.1234567 <<자리번째 (정수5개+소숫점이하7 = 5+7 =12)
--NUMBER(12,2) << 맞는 표현
--NUMBER(전체자리 : 소숫점이하 포함,~번째 자리에서 반올림: 양수인경우 N+1자리부터/음수인경우 N번째자리)
-- 정밀도~ 스케일 생략가능함 : (1.0 X 10^-130 ~ 9.99....99 X 10^125) 범위 내
사용예)
---------------------------------------------------------------------------------------------
입력값 선언 기억되는 형태
---------------------------------------------------------------------------------------------
1234.56789 NUMBER 1234.56789
1234.56789 NUMBER(*,2) 1234.57 --반올림 소수자리3
1234.56789 NUMBER(6) 1235--소수첫째자리에서 반올림함 1234.5<<
1234.56789 NUMBER(5,2) 오류 -- 소수자리3에서 반올림 하는데 전체값은 '1234.57' 6자리이다
1234.56789 NUMBER(6,2) 1234.57
1234.56789 NUMBER(6,0) 1235
1234.56789 NUMBER(6,-2) 1200 -- 1234에서 3에서(-2자리) 반올림 1200
CREATE TABLE TEMP05(
COL1 NUMBER,
COL2 NUMBER(*,2),
COL3 NUMBER(6),
COL4 NUMBER(5,2),
COL5 NUMBER(6,2),
COL6 NUMBER(6,0),
COL7 NUMBER(6,-2));
INSERT INTO TEMP05 VALUES(1234.56789,1234.56789,1234.56789,
123.56789,1234.56789,1234.56789,1234.56789);
-- 오류보고 precision : 정밀도 : 더 큰값이 들어왔습니다.
-- COL4 NUMBER(5,2) => 4번째 값 : 123.57 // '123.56789'
=> 소숫점 3자리에서 반올림하고 전체 숫자는 5자리이다
SELECT * FROM TEMP05;
3) 날짜 자료 타입
. 날짜자료(년,월,일,시,분,초) 저장 -- YYYY-MM-DD HH24:MI:SS 14자리
. DATE, TIMESTAMP 타입 제공
-- TIMESTAMP : 십억분의 일초 까지저장가능 / 3가지 타입이 있음 // 보통은 DATE 타입 사용
-- 둘다 크기지정 안한다.
(1) DATE 타입
. 기본날짜 자료형
. 덧셈(다가올 날짜)과 뺄셈(지나간 날짜)의 대상이 됨
. **SYSDATE : 날짜함수로 (지금 시스템이 제공하는) 시스템의 날짜 및 시각 정보를 반환
-- 매개변수가 없는 함수.
-- 함수는 매개변수가 없으면() 괄호 생략한다.
-- 날짜로 인식시키는 방법 : YYYY년,MM월,YY일
-- 날짜형 기억공간에 숫자를 저장함 20200229 윤년이면 되고 윤년이 아니면 오류
사용형식)
컬럼명 DATE
사용예)
CREATE TABLE TEMP06(
COL1 DATE, -- 크기 지정안한다.
COL2 DATE,
COL3 DATE);
INSERT INTO TEMP06 VALUES(SYSDATE,SYSDATE-10,SYSDATE+10);
-- 오늘날짜, 오늘날짜 -10일전, 오늘날짜 +10일후 //윈도우 시스템 시간확인
-- 곱셈 안되고 덧셈, 뺄셈만
SELECT * FROM TEMP06;
-- 시분초도 저장되어 있는데 컬럼에 안보임 -> 시분초까지 출력하기 위해서는 별도의 함수가 필요함
**시간정보 표시는 TO_CHAR 함수 사용 --변환 함수
SELECT TO_CHAR(COL1,'YYYY-MM-DD HH24:MI:SS'), -- 13시 HH24 = 1시 HH12
TO_CHAR(COL2,'YYYY-MM-DD HH24:MI:SS'),
TO_CHAR(COL3,'YYYY-MM-DD HH24:MI:SS')
FROM TEMP06;
-- 출력 : 2022-11-10 12:15:55
-- 중요!↓
날짜자료 사이의 뺄셈은 두 날짜사이의 일수(DAYS)를 반환
SELECT case mod(to_date('19991111')-TO_DATE('00010101')-1,7) -- 목요일
when 0 then '일요일'
when 1 then '월요일'
when 2 then '화요일'
when 3 then '수요일'
when 4 then '목요일'
when 5 then '금요일'
when 6 then '토요일'
end as 요일
FROM DUAL;
-- 출력 : 5 오늘은 금요일입니다.
-- mod는 7나눈 나머지 = 0이면 일요일
-- 오늘날짜에서 00010101 빼줌 ; 오늘은 아직 안지나서 -1을 해준다. -> 7로 나누고 나머지를 반환하세요
-- => 5라는 값 => 금요일 판단.
(2) TIMESTAMP 타입
. 매우 정교한 시각정보가 필요하거나 시간대역(TIME ZONE) 정보가 필요한 경우 사용
(사용형식)
컬럼명 TIMESTAMP -- 시간대역 정보없이 10억분의 1초 시각정보 반환
컬럼명 TIMESTAMP WITH LOCAL TIME ZONE
-- 로컬서버가 위치한 지역(현재 로그인된 지역)의
시간대역정보(생략 됨)와 10억분의 1초 시각정보 반환
컬럼명 TIMESTAMP WITH TIME ZONE
-- 서버가 위치한 시간대역정보(생략 됨)와 10억분의 1초 시각정보 반환
사용예)
CREATE TABLE TEMP07(
COL1 TIMESTAMP, -- 매우정교함 표로 보여질때는 소숫점자리가 짤림.
COL2 TIMESTAMP WITH LOCAL TIME ZONE, -- (시간대역정보)생략 COL1과 거의 같음
COL3 TIMESTAMP WITH TIME ZONE); -- ASIA / SEOUL
// 윈도우시스템- 시간및 날짜 : (UTC + ) 서울
-- 대륙명 / 도시
INSERT INTO TEMP07 VALUES(SYSDATE,SYSDATE,SYSDATE);
SELECT * FROM TEMP07;