DB

[MySQL] CAST 함수로 데이터 형 변환하기

인생아 2025. 7. 25. 11:28
반응형

MySQL에서 데이터를 다루다 보면 문자열을 숫자로, 날짜를 문자열로, 혹은 정수를 실수로 형 변환(type conversion) 해야 하는 상황이 자주 발생한다. 이때 사용하는 대표적인 함수가 바로 CAST() 함수이다.

CAST()는 SQL 표준에 따른 명시적 형 변환(explicit conversion) 함수로, 데이터 타입을 명확히 지정해 안전하고 예측 가능한 변환을 수행할 수 있다.

CAST 함수 문법

CAST(값 AS 데이터타입)
  • 값: 변환할 대상
  • 데이터타입: 변환할 목표 타입 (예: CHAR, DATE, SIGNED, UNSIGNED 등)

지원하는 주요 데이터 타입

타입 이름 설명
CHAR 문자열
DATE 날짜
DATETIME 날짜 및 시간
SIGNED 부호 있는 정수
UNSIGNED 부호 없는 정수
DECIMAL(M,D) 고정 소수점 숫자
BINARY 이진 데이터
반응형

예제 1: 숫자 → 문자열로 변환

SELECT CAST(12345 AS CHAR) AS 문자열변환;
-- 결과: '12345'

숫자를 문자형으로 변환하면 문자열 처리 함수나 LIKE 검색 등에 유용하다.

예제 2: 문자열 → 숫자 변환

SELECT CAST('3.14' AS DECIMAL(5,2)) AS 실수변환;
-- 결과: 3.14

문자열 숫자를 DECIMAL 또는 SIGNED로 변환하면 계산에 활용할 수 있다.

예제 3: 문자열 → 날짜 변환

SELECT CAST('2025-07-22' AS DATE) AS 날짜;
-- 결과: 2025-07-22

단, 날짜 형식이 MySQL의 날짜 포맷과 다르면 변환 실패할 수 있으므로 STR_TO_DATE()를 쓰는 게 더 안전한 경우도 있다.

예제 4: 정수 → 부호 없는 정수

SELECT CAST(-123 AS UNSIGNED) AS 음수제거;
-- 결과: 18446744073709551593 (오버플로우 처리됨)

SIGNED ↔ UNSIGNED 변환 시에는 범위 제한이나 오버플로우 주의가 필요하다.

반응형

예제 5: 실무 활용 - 형변환과 연산 조합

SELECT price, quantity,
       price * CAST(quantity AS UNSIGNED) AS 총합
FROM orders;

숫자가 문자열로 저장되어 있는 경우 연산 전 형 변환을 해주면 정확한 계산이 가능하다.

CAST vs 암시적 변환

MySQL은 내부적으로 자동 형 변환(암시적 변환)을 수행하지만, 예외나 의도치 않은 결과가 발생할 수 있다. 따라서 아래와 같은 경우에는 명시적으로 CAST()를 사용하는 것이 안정적이다.

  • WHERE 절에서 날짜 비교 시
  • JOIN 조건에서 타입이 다를 때
  • JSON → 문자열 변환 등

주의 사항

  • 타입이 유효하지 않거나 포맷이 맞지 않으면 NULL 반환
  • DECIMAL, CHAR, DATE는 자주 쓰이지만 정확한 길이 지정이 필요한 경우도 있다
  • 숫자형 CHAR → SIGNED/DECIMAL 변환 시 소수점 주의

정리

  • CAST()는 SQL 표준 형 변환 함수로, 다양한 타입 간의 안정적인 변환을 지원한다.
  • 암시적 변환에 의존하기보다는 CAST()를 통해 예측 가능한 쿼리 결과를 얻는 것이 좋다.
  • 실무에서는 연산, 비교, 정렬, JOIN 조건에서 타입 오류 방지에 매우 유용하다.

참고 문서

https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast

반응형