반응형
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
반응형
'DB' 카테고리의 다른 글
| [MySQL] 숫자, 날짜, 문자형 자유 변환 꿀팁 모음 (3) | 2025.07.25 |
|---|---|
| [MySQL] 날짜 → 문자열 변환: DATE_FORMAT 응용하기 🗓️ (2) | 2025.07.25 |
| [MySQL] 문자열 → 날짜 변환: STR_TO_DATE 실전 예제 📆 (1) | 2025.07.25 |
| [MySQL] CONVERT 함수와 CAST 차이점 비교 (0) | 2025.07.25 |
| [MySQL] CASE WHEN으로 다중 조건 처리하기 (1) | 2025.07.25 |
| [MySQL] NULLIF로 두 값 비교 후 조건 처리하기 (3) | 2025.07.25 |
| [MySQL] IFNULL로 NULL 값을 기본값으로 대체하기 (0) | 2025.07.25 |
| [MySQL] IF 함수로 조건 분기 처리하는 법 (0) | 2025.07.25 |