DB

[MySQL] 숫자, 날짜, 문자형 자유 변환 꿀팁 모음

인생아 2025. 7. 25. 15:39
반응형

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

 

반응형