2) VARCHAR2(n), NVARCHAR2(n), VARCHAR(n)
사용예)
CREATE TABLE TEMP02(
COL1 CHAR(10),
COL2 VARCHAR2(4000),
COL3 VARCHAR(100));
INSERT INTO TEMP02
VALUES('무궁화','무궁화 꽃이 피었습니다.','무궁화 꽃이 피었습니다.')
SELECT * FROM TEMP02;
SELECT LENGTHB(COL1), --- 값: 10
LENGTHB(COL2), --- 값: 33
LENGTHB(COL3) --- 값: 33
FROM TEMP02;
3) LONG
LENGTHB: 전체 데이터가 사용한 데이터 수
사용예)
CREATE TABLE TEMP03(
COL1 CHAR(10),
COL2 VARCHAR2(100),
COL3 LONG);
INSERT INTO TEMP03
VALUES('홍길동','대전시 중구 중앙로 76 영민빌딩 4층','대전시 중구 중앙로 76 영민빌딩 4층');
SELECT * FROM TEMP03;
SELECT LENGTHB(COL1),
LENGTHB(COL2)
TRIM(COL3)
FROM TEMP03;
4) CLOB(Character Large Objects)
사용예)
CREATE TABLE TEMP04(
COL1 VARCHAR2(4000),
COL2 LONG,
COL3 CLOB,
COL4 CLOB);
INSERT INTO TEMP04
VALUES('대전시 중구 중앙로 76 영민빌딩 4층','대전시 중구 중앙로 76 영민빌딩 4층',
'대전시 중구 중앙로 76 영민빌딩 4층','대전시 중구 중앙로 76 영민빌딩 4층');
SELECT * FROM TEMP04;
SELECT SUBSTR(COL1,8,6) --- 8번째에서 6글자 출력
SUBSTR(COL3,8,6)
DBMS_LOB.SUBSTR(COL3,8,6) --- 6번째에서 8글자 출력(기능이 바뀜)
LENGTHB(COL4),
DBMS_LOB.GETLENGTH(COL4)
FROM TEMP04;
COLB형식의 컬럼 안에 저장되어 있는 글자수를 카운트해서 출력해주는 함수
:DBMS_LOB.GETLENGTH(컬럼명)
SUBSTR(컬럼명, 시작위치 - 숫자 1부터 카운트, 추출할 문자 개수)
: 문자열에서 특정 문자열을 추출하는 함수(매개변수)
TRIM : 양쪽 공백 삭제
RTRIM : 오른쪽 공백 삭제
LTRIM : 왼쪽 공백 삭제
. : 소속을 나타내 줌
숫자자료형
ROUND 함수 : 반올림
NUMBER타입 안에 저장될 수 있는 값 : 그대로 저장
NUMBER(*,3) : 양수일 때 소수점 4번째 자리에서 반올림해서 3번째자리까지 나타내라
*를 생략시 : 소수점 1번째 자리에서 반올림해서 나타내라
정수부분이 모자라면 오류, 소수점 자리수가 모자라면 반올림
NUMBER(정밀도,스케일(N)) =>모두 생략 가능 소수점 N+1 자리에서 반올림해서 N자리까지 나타냄
NUMBER = NUMBER() (같음)
1 2 3 4 5 6 7 . 5 6 7 8
-7-6-5 -4 -3 -2 -1 0 1 2 3 4 => -2의 자리에서 반올림 : 1234600
-----------------------------------------------------------------------
입력 값 선언 저장되는 값
-----------------------------------------------------------------------
1234567.5678 NUMBER 1234567.5678
1234567.5678 NUMBER(*,3) 1234567.568
-- 정수부분을 시스템에서 알아서 저장해달라 의뢰하는 것
1234567.5678 NUMBER(8) 1234568
1234567.5678 NUMBER() 1234567.5678
1234567.5678 NUMBER(6) 오류 -- 정수부분의 자리수가 모자라서
1234567.5678 NUMBER(7,2) 오류
-- 스케일이 두 자리를 가지고 있어서 정수자리는 5개만 가능해서 모자람
1234567.5678 NUMBER(7,-2) 1234600 -- => -2의 자리에서 반올림 : 1234600
--------------------------------------------------------------------------
사용예)
CREATE TABLE TEMP05(
COL1 NUMBER,
COL2 NUMBER(*,3),
COL3 NUMBER(8),
COL4 NUMBER,
COL5 NUMBER(6),
COL6 NUMBER(7,2),
COL7 NUMBER(7,-2));
INSERT INTO TEMP05
VALUES(1234567.5678,1234567.5678,1234567.5678,1234567.5678,0,0,1234567.5678);
INSERT INTO TEMP05
VALUES(1234567.5678,1234567.5678,1234567.5678,1234567.5678,0,0,1234567.5678);
SELECT * FROM TEMP05;
** 정밀도 < 스케일 ( ex NUMBER(4,7))
. 정밀도 : 0이 아닌 유효숫자의 갯수
. 스케일 : 소숫점이하의 자리수
. 스케일 - 정밀도 : 소숫점이하에 나올 '0'의 갯수
-------------------------------------------------------------------------------
입력값 선언 저장 유효숫자(정밀도) 소숫점이하 0의 갯수
-------------------------------------------------------------------------------
1.2345 NUMBER(4,5) 오류 4(5) -
1.23 NUMBER(3,5) 오류 3(5) -
0.012345 NUMBER(3,4) 0.0123 5(3) 1(1)
0.00123 NUMBER(3,5) 0.00123 3(3) --유효숫자(0이 아닌 수)가 3개(1,2,3)
-------------------------------------------------------------------------------
3)날짜형
숫자는 날짜로 못바꾸고 문자만 날짜로 바꿀 수 있음, 날짜 형식으로 만들어줘야 함.
오라클은 문자열이 제일 후순위 데이터임.
날짜로 바뀔 수 있는 데이터 - 적어도 8글자, 14글자
TO CHAR / TO DATE / TO NUM - 변환 함수
(1)DATE
. 기본 날짜형
(사용형식)
컬럼명 DATE
사용예)
CREATE TABLE TEMP06(
COL1 DATE,
COL2 DATE,
COL3 DATE);
INSERT INTO TEMP06
VALUES(SYSDATE,SYSDATE-30,SYSDATE+30);
SELECT * FROM TEMP06;
SELECT TO_CHAR(COL1,'YYYY-MM-DD HH24:MI:SS') FROM TEMP06;
--- 위에서 INSERT 했을 때 체크되었던 시간
SELECT MOD(TRUNC(TO_DATE('19941129')-TO_DATE('00010101'))-1,7) FROM DUAL;
-- 경과된 일 수 계산 : ((날짜 - 서기1년) -1) / 7
(2)TIMESTAMP
. 기본 날짜형을 확장한 자료형
. 정교한 시간정보(10억분의 1초)나 시간대(TIMEZONE) 정보 포함 -- 최대 9자리 저장
. TIMESTAMP -- 시간대 정보없는 데이터 타입,
TIMESTAMP WITH TIME ZONE -- 시간대 정보포함,
TIMESTAMP WITH LOCAL TIME ZONE
-- CLIENT가 위치한 시간대 정보 포함 / Local 서버(가상서버 127.0.0.1)