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

SQL에서 'Value440', 'Value345'처럼 문자와 숫자가 섞인 열에서 최대값 구하는 방법

'Value440', 'Value345'처럼 문자열과 숫자가 결합된 형태로 저장된 열에서 최대값을 구하려면 MAX() 함수와 substring() 함수를 함께 사용하면 됩니다. 먼저 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1337
-> (
-> Value varchar(50)
-> );
Query OK, 0 rows affected (0.58 sec)

insert 명령을 사용해 테이블에 레코드를 삽입합니다.

mysql> insert into DemoTable1337 values('Value400');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1337 values('Value345');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1337 values('Value567');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1337 values('Value489');
Query OK, 1 row affected (0.22 sec)

select 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select * from DemoTable1337;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----------+
| Value |
+----------+
| Value400 |
| Value345 |
| Value567 |
| Value489 |
+----------+
4 rows in set (0.00 sec)

varchar 열에서 최대값 찾기

다음은 MySQL에서 varchar 타입 열의 최대값을 찾는 쿼리입니다. substring()으로 숫자 부분만 추출한 뒤, cast()를 이용해 decimal 타입으로 변환하고 그 결과에 MAX() 함수를 적용합니다.

mysql> select max(cast(substring(Value, 6) as decimal(10,2))) as MaximumValue from DemoTable1337;

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

+--------------+
| MaximumValue |
+--------------+
| 567.00 |
+--------------+
1 row in set (0.04 sec)

쿼리 동작 원리

substring(Value, 6)은 문자열의 6번째 위치부터 끝까지, 즉 'Value'라는 접두사를 제외한 숫자 부분만 반환합니다. 예를 들어 'Value567'에서는 '567'이 추출됩니다. 이 값을 decimal(10,2)로 변환하면 문자열 비교가 아닌 숫자 비교가 가능해지므로, MAX() 함수가 정확한 최대값을 계산할 수 있습니다. 만약 접두사 길이가 다르다면 정규식이나 LOCATE(), REGEXP_REPLACE() 등을 활용해 숫자 부분만 추출하는 방식으로 응용할 수 있습니다.