반응형
MySQL을 다루다 보면 숫자 → 문자열, 문자열 → 날짜, 날짜 → 숫자 등 다양한 타입 간의 변환 작업이 끊임없이 발생한다. 이런 변환이 실패하거나 잘못되면 쿼리 결과가 틀어지고, 성능에도 영향을 줄 수 있다. 이 글에서는 CAST, CONVERT, STR_TO_DATE, DATE_FORMAT 등 다양한 함수들을 조합해서 실무에서 자주 사용하는 변환 패턴을 모아봤다.

숫자 → 문자열
SELECT CONCAT('ORD-', CAST(12345 AS CHAR)) AS 주문번호;
-- 결과: ORD-12345
- 숫자를 문자열로 변환해 출력하거나 CONCAT 등에 활용할 수 있다.
- 예: 휴대폰 번호, 주문번호에 접두사 붙이기
SELECT CONCAT('ORD-', CAST(12345 AS CHAR)) AS 주문번호;
-- 결과: ORD-12345
문자열 → 숫자
MySQL에서는 문자열이 숫자로 변환 가능한 경우 자동으로 변환되지만, 명시적으로 변환하면 더 안전하다.
SELECT CAST('12345' AS UNSIGNED) AS 숫자1;
- 문자열이 숫자가 아닐 경우 0으로 변환되므로 주의 필요
SELECT CAST('ABC' AS SIGNED) AS 숫자;
-- 결과: 0
반응형
문자열 → 날짜
SELECT STR_TO_DATE('20250723', '%Y%m%d') AS 날짜형;
-- 결과: 2025-07-23
- 문자열 포맷이 다양할 때는 반드시 STR_TO_DATE() 사용
- 잘못된 포맷은 NULL 반환되므로 포맷 문자열 정확히 지정해야 한다.
날짜 → 문자열
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d') AS 날짜문자열;
-- 결과: 2025/07/23
- 화면에 출력하거나, UI 전달용 API에서 자주 사용
날짜 → 숫자
SELECT UNIX_TIMESTAMP('2025-07-23 12:00:00') AS 타임스탬프;
-- 결과: 1753220400
- UNIX_TIMESTAMP()는 날짜를 1970년 1월 1일 기준 초단위 정수로 바꿔준다.
숫자 → 날짜
SELECT FROM_UNIXTIME(1753220400) AS 원래날짜;
-- 결과: 2025-07-23 12:00:00
- 저장된 타임스탬프 값을 다시 날짜형으로 복원할 때 사용
문자셋 변환 (문자열 → 문자열)
SELECT CONVERT('한글문자열' USING utf8mb4);
- 문자셋 변경을 통해 인코딩 오류 해결 가능
- CAST는 문자셋 변경 불가 → 이때는 무조건 CONVERT(str USING charset) 사용
반응형
정리표: 상황별 함수 선택
| 변환 목적 | 추천 함수 |
| 숫자 → 문자 | CAST(... AS CHAR) |
| 문자 → 숫자 | CAST(... AS SIGNED) |
| 문자열 → 날짜 | STR_TO_DATE() |
| 날짜 → 문자열 | DATE_FORMAT() |
| 날짜 → 타임스탬프 | UNIX_TIMESTAMP() |
| 타임스탬프 → 날짜 | FROM_UNIXTIME() |
| 문자셋 변경 | CONVERT(... USING charset) |
실무 예제: JSON 필드 날짜 조합
SELECT
CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '_', CAST(JSON_EXTRACT(json_data, '$.seq') AS CHAR)) AS 조합ID
FROM api_logs;
- 날짜와 숫자를 조합한 고유 식별자 생성에 활용
마무리 꿀팁
- 타입이 안 맞으면 암묵적 변환으로 오류나 성능 저하가 발생할 수 있다.
- 복잡한 쿼리에서는 명시적으로 CAST, CONVERT 등으로 타입을 지정하자.
- 날짜/문자/숫자 간 변환은 모든 SQL 프로젝트에서 꼭 필요한 실전 능력이다.
참고 문서
https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] ENCODE와 DECODE 함수 사용법 🔐 (1) | 2025.07.28 |
|---|---|
| [MySQL] AES_ENCRYPT, AES_DECRYPT로 대칭키 암호화 🔐 (0) | 2025.07.25 |
| [MySQL] MD5와 SHA 해시 함수 비교와 실전 활용 (1) | 2025.07.25 |
| [MySQL] PASSWORD와 OLD_PASSWORD 함수 완전 해부 (0) | 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] CAST 함수로 데이터 형 변환하기 (0) | 2025.07.25 |