Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

SQL에서 VARCHAR를 DOUBLE로 변환하는 방법 – CAST() 함수 완벽 가이드

SQL에서 VARCHAR를 DOUBLE로 변환하는 방법

MySQL에서 문자열(VARCHAR)로 저장된 숫자 데이터를 수치 연산이나 정렬에 활용하려면 데이터 타입 변환이 필요합니다. 이때 CAST() 함수를 사용하면 VARCHAR 타입을 DOUBLE(DECIMAL) 타입으로 간단하게 변환할 수 있습니다.

CAST() 함수 기본 문법

SELECT yourColumnName1, yourColumnName2, ......N,
CAST(yourColumnName AS DECIMAL(TotalDigit, DigitAfterDecimalPoint)) anyVariableName
FROM yourTableName
ORDER BY anyVariableName DESC;
  • TotalDigit: 전체 자릿수
  • DigitAfterDecimalPoint: 소수점 이하 자릿수

위 문법을 실제로 이해하기 위해 예제 테이블을 하나 만들어 보겠습니다.

1. 테이블 생성

다음 쿼리로 테이블을 생성합니다.

mysql> create table VarcharToDouble
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Name varchar(10),
    -> Amount varchar(10),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.67 sec)

여기서 Amount 컬럼은 금액이지만 VARCHAR 타입으로 선언되어 있어, 그대로 두면 숫자 크기순 정렬이나 합계 계산에 문제가 생길 수 있습니다.

2. 샘플 데이터 입력

INSERT 명령어로 몇 개의 레코드를 추가합니다.

mysql> insert into VarcharToDouble(Name,Amount) values('John','456.78');
Query OK, 1 row affected (0.14 sec)
mysql> insert into VarcharToDouble(Name,Amount) values('Larry','8465.98');
Query OK, 1 row affected (0.18 sec)
mysql> insert into VarcharToDouble(Name,Amount) values('Mike','9083.45');
Query OK, 1 row affected (0.12 sec)
mysql> insert into VarcharToDouble(Name,Amount) values('Sam','46475.50');
Query OK, 1 row affected (0.19 sec)
mysql> insert into VarcharToDouble(Name,Amount) values('Carol','10003.35');
Query OK, 1 row affected (0.17 sec)

3. 저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from VarcharToDouble;

실행 결과는 다음과 같습니다.

+----+-------+----------+
| Id | Name  | Amount  |
+----+-------+----------+
|  1 | John  | 456.78  |
|  2 | Larry | 8465.98 |
|  3 | Mike  | 9083.45 |
|  4 | Sam   | 46475.50 |
|  5 | Carol | 10003.35 |
+----+-------+----------+
5 rows in set (0.00 sec)

4. CAST()로 VARCHAR를 DOUBLE(DECIMAL)로 변환

이제 CAST() 함수를 사용해 Amount 컬럼을 DECIMAL(10,2)로 변환하고, 변환된 값을 기준으로 내림차순 정렬해 보겠습니다.

mysql> select Id, Name, CAST(Amount AS DECIMAL(10,2)) TotalAmount from VarcharToDouble
   -> order by TotalAmount desc;

실행 결과는 다음과 같습니다.

+----+-------+-------------+
| Id | Name  | TotalAmount |
+----+-------+-------------+
|  4 | Sam   |    46475.50 |
|  5 | Carol |    10003.35 |
|  3 | Mike  |     9083.45 |
|  2 | Larry |     8465.98 |
|  1 | John  |      456.78 |
+----+-------+-------------+
5 rows in set (0.00 sec)

VARCHAR 상태에서는 '9'로 시작하는 값이 '4'보다 앞에 오는 등 문자열 기준 정렬이 되지만, CAST()로 수치형으로 변환하면 실제 숫자 크기 기준으로 올바르게 정렬되는 것을 확인할 수 있습니다.

참고 사항

  • DECIMAL vs DOUBLE: 금액처럼 정확한 소수점 계산이 필요한 경우에는 부동소수점 방식인 DOUBLE보다 고정소수점 방식인 DECIMAL을 사용하는 것이 안전합니다.
  • MySQL 8.0.17 이상: 최신 버전에서는 CAST(Amount AS DOUBLE) 구문도 직접 지원하므로, 환경에 따라 선택적으로 사용할 수 있습니다.
  • CONVERT() 함수: CAST() 대신 CONVERT(Amount, DECIMAL(10,2)) 형태로도 동일한 결과를 얻을 수 있습니다.