DB/SQL

[SQL] 데이터 형식, 형변환 (mysql)

journey-dev 2023. 5. 31. 14:53

정수형

1. 종류

TINYINT(1바이트) : -128~127 범위의 숫자를 표현할 수 있다.

SMALLINT(2바이트) : -32768~32767

INT(4바이트) :  약-21억 ~ 21억

BIGINT(8바이트) :  약 -900경 ~ 900경

CREATE table numbers(
    tinyint_col TINYINT, -- -128~127 범위의 숫자를 표현할 수 있다.
    smallint_col SMALLINT, -- -32768~32767
    int_col INT, -- 약-21억 ~ 21억
    bigint_col BIGINT -- 약 -900경 ~ 900경
);

-- 입력가능한 최대 숫자 크기
INSERT INTO numbers VALUES(127,32767,2147483647,9000000000000000000); -- 0이 18개

 

 

2. SIGNED , UNSIGNED 

SIGNED 

: 기본적으로 데이터 타입 설정시 이 형태로 지정됨.

: 음수~양수 값 가능
: 위의 종류1의 예제

 

UNSIGNED 

: 값의 범위가 0 부터 시작하게 됨. 

: 해당 컬럼의 값이 음수일 경우가 없을때 쓰는게 좋음

CREATE table numbers(
    tinyint_col TINYINT UNSIGNED, -- -0~255 범위의 숫자를 표현할 수 있다.
    smallint_col SMALLINT UNSIGNED, -- 0~65535
    int_col INT UNSIGNED, -- 0 ~ 약42억
    bigint_col BIGINT UNSIGNED -- 0 ~ 약1800경
);

 -- 입력가능한 최대 숫자 크기
INSERT INTO numbers VALUES(255,65535,4294967295,18000000000000000000); -- 0이 18개

 

3. 주의

숫자형에 앞글자가 0으로 시작하면, 자동으로 생략됨.

따라서 지역번호 처럼 031,02 로 저장해야 하는 값이라면, 숫자형이 아닌 문자로 저장해야 함.

 

 

실수형

1. 종류

FLOAT : 소수점 아래 7자리 까지 표현 (바이트 수 : 4)

DOUBLE : 소수점 아래 15자리 까지 표현 (바이트 수 : 8)

 

문자형

1. 종류

1) CHAR(개수)

  : 바이트수 1~255

  : 고정길이 문자형, 자릿수가 고정되 있음.

  : VARCHAR보다 성능이 더 좋음

  : 예) CHAR(10)에 '가나다' 를 입력하면 3글자지만 10자리 모두 확보하게 되어 공간이 낭비됨.

 

2) VARCHAR(개수)

  : 바이트수 1~16383

  : 가변길이 문자형, 자릿수가 변함

  : 예) CHAR(10)에 '가나다' 를 입력하면 10자리로 지정했지만 3자리만 사용됨.

3) BINARY, VARBINARY (잘 사용x)

 

<대량의 문자형 데이터 저장시>

4) TEXT

  : 바이트수 1~65535

5)  LONGTEXT

    : 바이트수 1~4294967295

6)  BLOB

  : 바이트수 1~65535
  : 이미지,동영상 등의 이진 데이터 저장시

7)  LONGBLOB

    : 바이트수 1~4294967295

   : 이미지,동영상 등의 이진 데이터 저장시

 

2. 문자형, 숫자형 사용 구별

- 데이터가 숫자 형태라도 숫자로서의 의미가 없다면 문자형으로 지정하는게 좋음

- 숫자로 의미가 있으려면 : 1)더하기,뺴기 등 연산을 하거나 2) 크다,작다, 순서에 의미가 있어야 함

- 예) 핸드폰 번호 : 단순히 정보를 저장하는 것임. 핸드폰 번호로 연산하는게 아님. => 문자형으로 하는게 적절

 

 

 

날짜형

1. 종류

DATE : 날짜만 저장. / YYYY-MM-DD (바이트 수 : 3) 

TIME : 시간만 저장. / HH:MM:SS (바이트 수 : 3) 

DATETIME : 날짜+시간 저장./  YYYY-MM-DD  HH:MM:SS (바이트 수 : 8) 

 


형 변환

1. 기본 형태

CAST (값 AS 데이터형식[길이]); -- 방법1. CAST
CONVERT(값,데이터형식[길이]);-- 방법2. CONVERT

 

 

2. 사용

* 실수 정수 형 변환

-- select avg(price)from buy -- 1551.0714

SELECT CAST(avg(price) AS signed) FROM buy; -- 1551
SELECT CONVERT(avg(price), signed) FROM buy; -- 1551

 

* 다양한 구분자를 날짜형으로 변경 가능

SELECT CAST('2022/12/12' AS DATE); -- 2022-12-12
SELECT CAST('2022$12$12' AS DATE); -- 2022-12-12
SELECT CAST('2022%12%12' AS DATE); -- 2022-12-12
SELECT CAST('2022@12@12' AS DATE); -- 2022-12-12

 

------

[TODO]

-- select avg(price)from buy -- 1551.0714
 
-- CAST (값 AS 데이터형식[길이])
-- CONVERT(값,데이터형식[길이])

-- signed : 부호가 있는 정수
-- unsigned : 부호가 있는 정수

-- 실수-> 정수 형 변환
-- SELECT CAST(avg(price) AS signed) FROM buy; -- 1551
-- SELECT CONVERT(avg(price), signed) FROM buy; -- 1551


-- 다양한 구분자를 날짜형으로 변경 가능
-- SELECT CAST('2022/12/12' AS DATE); -- 2022-12-12
-- SELECT CAST('2022$12$12' AS DATE); -- 2022-12-12
-- SELECT CAST('2022%12%12' AS DATE); -- 2022-12-12
-- SELECT CAST('2022@12@12' AS DATE); -- 2022-12-12
 
-- 정수-> 문자 형 변환
-- CONCAT 함수 : 문자를 이어주는 역할
-- SELECT mem_id,CONCAT(CAST(price AS CHAR), 'X',CAST(amount AS CHAR)) as '가격X수량' from buy;

-- 암묵적인 형 변환
-- 산술 연산자 있으면 : 숫자형으로 자동 변경
SELECT '100'+'200'; -- 300,  
SELECT '100'+ 200; -- 300

-- concat은 문자형으로 변경됨.
SELECT concat('100',200); -- 100200

 


https://www.postgresql.org/docs/current/datatype.html

https://www.tutorialspoint.com/postgresql/postgresql_create_table.htm