본문 바로가기
SQL

타입 연산

by domsam 2025. 2. 7.
반응형

1. 문자열

MySQL에서는 쌍따옴표를 사용해 문자열 표기할 수 있지만 홑따옴표 사용이 표준이다.
SQL 표준에서는 문자열 값에 홑따옴표가 포함돼 있을 때 홑따옴표를 두 번 연속해서 입력하면 된다. 

SELECT * FROM tbl WHERE dept_no='d''001';     >>    d'001 
SELECT * FROM tbl WHERE dept_no='d"001';      >>    d"001


2. 숫자

숫자는 홑따옴표 없이 값을 입력하면 된다. 
문자열 형태로 숫자를 사용하더라도 비교 대상이 숫자 타입의 컬럼이면 MySQL 서버는 문자열 값을 숫자 값으로 자동 형변환 후 비교를 한다. 
아래 쿼리문 중 (1) 쿼리문은 '10001' 문자열이 숫자형으로 형변환되기에 성능상 큰 문제가 없지만 (2) 쿼리문은 string_column열의 모든 레코드 문자열 값을 숫자형으로 형변환하기 때문에 성능 문제가 발생될 수 있다.  

 (1) SELECT * FROM tbl WHERE number_column='10001';  
 (2) SELECT * FROM tbl WHERE string_column=10001;



3. 날짜

MySQL에서는 정해진 형태의 날짜 포맷으로 표기하면 자동으로 DATE나 DATETIME 타입으로 형변환하기 때문에 복잡하게 STR_TO_DATE() 같은 함수를 사용하지 않아도 된다. 아래 두 쿼리문은 결과가 같다.

SELECT * FROM tbl WHERE from_date='2011-04-29';  
SELECT * FROM tbl WHERE from_date=str_to_date('2011-04-29', '%Y-%m-%d');




4. Boolean

MySQL은 BOOL, BOOLEAN이라는 타입이 있지만 내부적으로 TINYINT로 처리한다. 테이블을 생성할 때 BOOL타입을 주어 생성한 뒤 조회해보면 컬럼의 타입이 TINYINT로 되어 있다. 
아래 쿼리를 보면 (1) select문에서는 20값이 보이지만 (2) select문에서는 나타나지 않는다.
불리언 타입을 꼭 사용하고 싶다면 ENUM타입으로 관리하는 것을 추천한다.

CREATE TABLE tb_boolean (
    bool_value BOOL 
);

INSERT INTO tb_boolean
    (bool_value)
VALUES
    (FALSE)
  , (TRUE)
  , (0)
  , (1)
  , (20);

(1) SELECT * FROM tb_boolean;

(2) SELECT * 
      FROM tb_boolean 
     WHERE bool_value IN (TRUE, FALSE);







반응형