SQL기본 - 암시적 형변환과 명시적 형변환

2023. 3. 20. 13:50공부/SQL

변환함수

DB에서 데이터 유형에 대한 형변환을 할 수 있는 방법은 두가지

 

1. 명시적 형변환 : 변환 함수를 사용하여 데이터 유형 변환을 명시적으로 나타냄

 

2. 암시적 형변환 : 데이터베이스가 내부적으로 알아서 데이터 유형을 변환함.

 

예를들어 아래와 같은 테이블이 있다고 가정해보자

CREATE TABLE sample_table (
    id INTEGER,
    name VARCHAR(20),
    age INTEGER,
    height FLOAT
);

INSERT INTO sample_table VALUES
    (1, 'John', 25, 175.2),
    (2, 'Jane', 30, 160.5),
    (3, 'Mike', 35, 182.0);

이 테이블에서, ageheight는 각각 INTEGERFLOAT 데이터 타입을 가지고 있다. 이때, 다음과 같은 쿼리문이 실행된다고 하면?

SELECT age * height FROM sample_table;

 

형이 다른 age (INTEGER) 와 height(FLOAT)가 연산이 되면~ 반환 되는 타입은? => FLOAT

 

그렇다면 반환되는 타입의 우선순위가 존재하는지에 대해 궁금증이 든다. 

더보기

암시적 형변환 반환 타입 우선순위

  1. BLOB, BINARY, VARBINARY, IMAGE
  2. TIMESTAMP, DATETIME, DATE
  3. DECIMAL, NUMERIC
  4. FLOAT, REAL
  5. BIGINT, INT, SMALLINT, TINYINT, BIT, BOOLEAN
  6. VARCHAR, NVARCHAR, CHAR, NCHAR
  7. UNIQUEIDENTIFIER, UUID

위와 같다고 한다. 이때 INT와 FLOAT를 연산 하는 경우 FLOAT가 우선순위가 더 높으므로 FLOAT를 반환하게 된다. 논리적으로 생각해보면 INT는 소수점을 표현하지 못하므로 당연히 FLOAT가 반환되는것이 맞으며 다른 경우도 논리적으로 생각하면 될것 같다.

 

 명시적 형변환은 변환함수를 사용하여 타입을 변환하는데 예를들면

TO_NUMBER, TO_CHAR, TO_DATE와 같이 TO_를 이용하는 함수가 있고,

Null 관련함수로는 NVL(arg1, arg2) 와 같이 arg1이 null일 경우 arg2를 반환하는 함수 등 NullIF(), COALESCE()

'공부 > SQL' 카테고리의 다른 글

SQL 기본 - WHERE PHRASE  (0) 2023.03.20
SQL #3 - CASE Function  (0) 2023.03.20
SQLD #02 Relationship & Identifiers  (0) 2023.03.14
SQLD 기초 #01 모델링  (0) 2023.02.25
[SQL]Join  (0) 2023.02.03