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

MySQL에서 문자열의 마지막 3자를 기준으로 정렬하는 방법

MySQL에서 컬럼 값의 마지막 3자를 기준으로 결과를 정렬하려면 ORDER BY 절과 RIGHT() 함수를 함께 사용하면 됩니다. RIGHT() 함수는 문자열의 오른쪽부터 지정한 길이만큼의 문자를 반환하므로, 이를 정렬 기준으로 활용할 수 있습니다.

기본 문법

SELECT *FROM yourTableName
ORDER BY RIGHT(yourColumnName,3) yourSortingOrder;

yourSortingOrder 부분에 오름차순은 ASC, 내림차순은 DESC를 입력하여 원하는 정렬 방향을 지정합니다.

예제 테이블 생성하기

문법을 이해하기 위해 먼저 예제 테이블을 만들어 보겠습니다. 아래 쿼리로 테이블을 생성합니다.

mysql> create table OrderByLast3Chars
   -> (
   -> EmployeeId int NOT NULL AUTO_INCREMENT,
   -> EmployeeName varchar(20),
   -> EmployeeAge int,
   -> PRIMARY KEY(EmployeeId)
   -> );
Query OK, 0 rows affected (0.56 sec)

다음으로 INSERT 명령어를 사용해 테이블에 샘플 데이터를 추가합니다.

mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('Carol_901',24);
Query OK, 1 row affected (0.14 sec)

mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('Bob_101',21);
Query OK, 1 row affected (0.19 sec)

mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('Sam_107',22);
Query OK, 1 row affected (0.20 sec)

mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('Mile_677',26);
Query OK, 1 row affected (0.19 sec)

mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('John_978',27);
Query OK, 1 row affected (0.75 sec)

mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('David_876',29);
Query OK, 1 row affected (0.28 sec)

SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select *from OrderByLast3Chars;

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

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 1          | Carol_901    | 24          |
| 2          | Bob_101      | 21          |
| 3          | Sam_107      | 22          |
| 4          | Mile_677     | 26          |
| 5          | John_978     | 27          |
| 6          | David_876    | 29          |
+------------+--------------+-------------+
6 rows in set (0.00 sec)

사례 1: 오름차순(ASC) 정렬

이름 컬럼의 마지막 3자를 기준으로 오름차순 정렬하려면 아래와 같이 쿼리를 작성합니다.

mysql> select *from OrderByLast3Chars
   -> order by RIGHT(EmployeeName,3) asc;

실행 결과는 다음과 같습니다. 이름 뒤의 숫자가 101 → 107 → 677 → 876 → 901 → 978 순으로 정렬된 것을 확인할 수 있습니다.

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 2          | Bob_101      | 21          |
| 3          | Sam_107      | 22          |
| 4          | Mile_677     | 26          |
| 6          | David_876    | 29          |
| 1          | Carol_901    | 24          |
| 5          | John_978     | 27          |
+------------+--------------+-------------+
6 rows in set (0.00 sec)

사례 2: 내림차순(DESC) 정렬

반대로 내림차순으로 정렬하고 싶다면 DESC를 사용합니다.

mysql> select *from OrderByLast3Chars
   -> order by RIGHT(EmployeeName,3) desc;

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

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 5          | John_978     | 27          |
| 1          | Carol_901    | 24          |
| 6          | David_876    | 29          |
| 4          | Mile_677     | 26          |
| 3          | Sam_107      | 22          |
| 2          | Bob_101      | 21          |
+------------+--------------+-------------+
6 rows in set (0.00 sec)

정리

이처럼 ORDER BY RIGHT(컬럼명, 3) 구문을 사용하면 문자열 끝의 특정 자릿수를 기준으로 손쉽게 정렬할 수 있습니다. 파일명 뒤에 붙은 번호나 코드 형태의 데이터를 정렬할 때 특히 유용하게 활용됩니다. 참고로 RIGHT() 함수는 문자열 비교를 수행하므로, 숫자로 된 접미사라도 사전식(lexicographic) 순서로 정렬된다는 점을 유의해야 합니다.