dev._.note

[SQL] Data type 본문

Dev/SQL

[SQL] Data type

Laena 2023. 3. 1. 23:34

✓ 문자형

CHAR : 고정형 문자타입. 최대 2000byte

  • char(10) 일때, 'korea' 입력시 실제값은 5byte이지만,
  • 저장된 값은 10byte.
  • char(10) 일때, '한국' 입력시 실제값은 6byte이지만,
  • 저장된 값은 10byte.
  • xe버전(교육용)에서는 한글 1개당 3byte 처리.
  • se/ee버전(상업)에서는 2byte씩 처리됨.

VARCHAR2 : 가변형 문자타입. 최대 4000byte

  • varchar2(10) 일때, 'korea' 입력시 실제값은 5byte,
  • 저장된 값 5byte
  • varchar2(10) 일때, '한국' 입력시 실제값은 6byte,
  • 저장된 값 6byte.

long : 최대크기 2gb

clob : 최대크기 4gb


예제

-- 테이블 생성, 데이터할당
create table tb_datatype (
    a char(10),
    b varchar2(10)
);
desc tb_datatype;

--데이터(행단위) 추가
insert into tb_datatype
values('korea', 'korea');
insert into tb_datatype
values('한국', '한국');
insert into tb_datatype
values('필승', '필승코리아'); -- ORA-12899: "KH"."TB_DATATYPE"."A" 열에 대한 값이 너무 큼(실제: 15, 최대값: 10)

select 
    a, 
    lengthb(a),  -- 해당컬럼의 byte수 리턴
    b,
    lengthb(b)
from 
    tb_datatype;

commit; -- 메모리상의 작업내용을 실제 db에 반영

✓ 숫자형

NUMBER([p, s])

  • p : 표현가능한 전체자리수
  • s : 소수점이하 자리수

예제

--drop table tb_datatype; → 테이블 삭제
create table tb_datatype(
    a number,
    b number(7, 3),
    c number(7),
    d number(7, 1),
    e number(7, -2)
);
insert into tb_datatype
values(1234.567, 1234.567, 1234.567, 1234.567, 1234.567);

insert into tb_datatype
values(1234.56789, 1234.56789, 1234.56789, 1234.56789, 1234.56789);

insert into tb_datatype
values(123456789, 123456789, 123456789, 123456789, 123456789);
-- ORA-01438: 이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다.

select * from tb_datatype;

결과값) 1234.567 값처리
	number : 1234.567
	number(7, 3) : 1234.567		
	number(7) : 1235 (반올림)	
	number(7, 1) : 1234.6
	number(7, -2) : 1200

✓ 날짜형

  • date : 년월일시분초
  • timestamp : 년월일시분초밀리초 지역대
create table tb_datatype (
    a date,
    b timestamp with time zone
);

insert into tb_datatype
values(sysdate, systimestamp);

select 
    to_char(a, 'yyyy/mm/dd hh24:mi:ss'), 
    b
from 
    tb_datatype;
    
desc tb_datatype;
    
-- 날짜형간 산술연산 지원 : 단위가 하루인 숫자
-- 날짜 + 숫자 : date
-- 날짜 - 숫자 : date
-- 날짜 - 날짜 : number

select 
    to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss'),
    to_char(sysdate - 1, 'yyyy/mm/dd hh24:mi:ss'), 
    to_char(sysdate + 1, 'yyyy/mm/dd hh24:mi:ss'),
    sysdate - (sysdate - 1)
from 
    dual; -- 가상테이블(1행)

-- 수료일에서 남은 날짜
select
    to_date('20220217', 'yyyymmdd') - sysdate
from
    dual;

'Dev > SQL' 카테고리의 다른 글

[SQL] 정규화(Normalization)  (0) 2023.03.04
[SQL] SQL 분류  (0) 2023.02.24
[SQL] Database개요  (1) 2023.02.23