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

MySQL에서 INET_ATON() 함수를 사용해 IP 주소 레코드 정렬하는 방법

IP 주소는 문자열이기 때문에 단순히 ORDER BY를 사용하면 문자열 기준으로 정렬되어 의도하지 않은 순서가 나올 수 있습니다. 예를 들어 '192.168.110.9'는 '192.168.110.10'보다 뒤에 위치해야 하지만, 문자열 비교에서는 앞에 오게 됩니다.

이 문제를 해결하려면 MySQL의 INET_ATON() 함수를 사용하면 됩니다. 이 함수는 IP 주소를 숫자 값으로 변환해 주기 때문에, 변환된 숫자를 기준으로 ORDER BY를 적용하면 네트워크 순서대로 올바르게 정렬할 수 있습니다.

1. 테이블 생성하기

먼저 IP 주소를 저장할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> IpAddress varchar(50)
-> );
Query OK, 0 rows affected (1.36 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('192.168.110.78');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('192.168.110.87');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('192.168.110.75');
Query OK, 1 row affected (0.26 sec)

3. 전체 레코드 조회하기

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

mysql> select *from DemoTable;

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

+----------------+
| IpAddress |
+----------------+
| 192.168.110.78 |
| 192.168.110.87 |
| 192.168.110.75 |
+----------------+
3 rows in set (0.00 sec)

4. INET_ATON()으로 IP 주소 정렬하기

이제 INET_ATON() 함수를 활용해 IP 주소 레코드를 정렬하는 쿼리를 실행합니다.

mysql> select *from DemoTable
-> order by inet_aton(IpAddress);

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

+----------------+
| IpAddress |
+----------------+
| 192.168.110.75 |
| 192.168.110.78 |
| 192.168.110.87 |
+----------------+
3 rows in set (0.00 sec)

정리

INET_ATON()은 IPv4 주소를 4바이트 부호 없는 정수로 변환하는 함수입니다. 각 옥텟(점으로 구분된 숫자)을 수학적으로 비교할 수 있는 값으로 바꿔주기 때문에, IP 주소를 실제 네트워크 대역 순서대로 정렬할 때 매우 유용합니다. 반대로 숫자를 다시 IP 주소 형식으로 변환하고 싶다면 INET_NTOA() 함수를 사용하면 됩니다.