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

MySQL에서 '2321/78/54-6'처럼 특수 문자가 포함된 레코드 정렬하는 방법

슬래시(/)나 하이픈(-) 같은 특수 문자가 섞여 있는 값, 예를 들어 '2321/78/54-6' 형태의 데이터를 숫자 기준으로 정렬하려면 단순한 ORDER BY만으로는 원하는 결과를 얻기 어렵습니다. 이럴 때는 SUBSTRING() 함수와 함께 ORDER BY를 사용하면 됩니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
    -> (
    -> Value varchar(40)
    -> );
Query OK, 0 rows affected (0.59 sec)

2. 레코드 삽입하기

insert 명령을 사용해 테이블에 데이터를 입력합니다.

mysql> insert into DemoTable values('2321/78/54-6');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2321/78/54-8');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('2321/78/54-5');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('2321/78/54-9');
Query OK, 1 row affected (0.21 sec)

3. 저장된 레코드 확인하기

select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable;

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

+--------------+
| Value        |
+--------------+
| 2321/78/54-6 |
| 2321/78/54-8 |
| 2321/78/54-5 |
| 2321/78/54-9 |
+--------------+
4 rows in set (0.00 sec)

4. 특수 문자가 포함된 값 정렬하기

이제 하이픈 뒤의 숫자를 기준으로 내림차순 정렬하는 쿼리를 살펴보겠습니다. 핵심은 두 가지입니다.

  • substring(Value from 1 for 10): 앞부분(공통 접두사)을 기준으로 먼저 그룹화합니다.
  • cast(substring(Value from 11) as decimal): 나머지 부분(하이픈 뒤 숫자)을 숫자로 변환해 정렬합니다.
mysql> select * from DemoTable
    -> where Value like '2321/78/54%'
    -> order by substring(Value from 1 for 10), cast(substring(Value from 11) as decimal);

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+--------------+
| Value        |
+--------------+
| 2321/78/54-9 |
| 2321/78/54-8 |
| 2321/78/54-6 |
| 2321/78/54-5 |
+--------------+
4 rows in set (0.05 sec)

정리

특수 문자가 포함된 문자열을 정렬할 때는 SUBSTRING()으로 필요한 부분만 추출하고, CAST()로 숫자형으로 변환한 뒤 ORDER BY에 적용하면 됩니다. 이 방법을 활용하면 '2321/78/54-6' 같은 복합 형식의 코드 값도 의도한 대로 깔끔하게 정렬할 수 있습니다.