MySQL에서 문자열 값의 일부(예: 접두사를 제외한 숫자 부분)를 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때 ORDER BY 절과 RIGHT() 함수를 함께 사용하면 간단하게 해결할 수 있습니다.
RIGHT() 함수란?
RIGHT() 함수는 문자열의 오른쪽부터 지정한 길이만큼의 문자를 반환합니다. 예를 들어 'User1234'라는 값에서 RIGHT(UserId, 4)를 적용하면 '1234'가 반환되며, 이 값을 기준으로 정렬할 수 있습니다.
1. 샘플 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
UserId varchar(100)
);
Query OK, 0 rows affected (0.33 sec)2. 레코드 삽입하기
INSERT 명령을 사용하여 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('User1234');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values('User9874');
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable values('User9994');
Query OK, 1 row affected (0.04 sec)
mysql> insert into DemoTable values('User1211');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('User1012');
Query OK, 1 row affected (0.79 sec)3. 전체 레코드 조회하기
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----------+ | UserId | +----------+ | User1234 | | User9874 | | User9994 | | User1211 | | User1012 | +----------+ 5 rows in set (0.00 sec)
4. 값의 일부를 기준으로 정렬하기
오름차순 정렬 (Case 1)
결과를 오름차순으로 정렬하려면 아래와 같이 RIGHT() 함수와 ORDER BY 절을 사용합니다.
mysql> select *from DemoTable ORDER BY RIGHT(UserId, 4);
실행 결과는 다음과 같습니다.
+----------+ | UserId | +----------+ | User1012 | | User1211 | | User1234 | | User9874 | | User9994 | +----------+ 5 rows in set (0.00 sec)
'User' 뒤의 숫자 부분을 기준으로 오름차순 정렬된 것을 확인할 수 있습니다.
내림차순 정렬 (Case 2)
결과를 내림차순으로 정렬하려면 DESC 키워드를 추가하면 됩니다.
mysql> select *from DemoTable ORDER BY RIGHT(UserId, 4) DESC;
실행 결과는 다음과 같습니다.
+----------+ | UserId | +----------+ | User9994 | | User9874 | | User1234 | | User1211 | | User1012 | +----------+ 5 rows in set (0.00 sec)
정리
이처럼 RIGHT() 함수를 활용하면 문자열 값의 특정 부분만 추출하여 정렬할 수 있습니다. 참고로 LEFT(), SUBSTRING(), SUBSTRING_INDEX() 등의 함수도 함께 활용하면 접두사, 중간 부분 등 다양한 위치의 값을 기준으로 유연하게 정렬할 수 있으니 상황에 맞게 선택해서 사용하시기 바랍니다.