首页 > 解决方案 > 如何获得 varchar 列的最大值

问题描述

假设我有一个包含所有可能 IP 地址的表

ID IP地址
1 0.0.0.0
2 0.0.0.1
... ...
X 255.255.255.255

(假设 x 是一个大数)

当我这样做MAX(ip_address)时,输出是 99.99.99.99,而不是 255.255.255.255

我在stackoverflow上发现的其他问题有一个解决方案,他们将输出id具有最大ip_address的,但不会输出正确ip_address的255.255.255.255(他们使用INET_ATON(),结果是一长串数字,如4292247153。我想要输出显示类似

ID MAX(ip_address)
X 255.255.255.255

标签: mysqlsql

解决方案


这在 MySQL 中很痛苦,但是您可以将 ip 地址分成几部分并分别对每个子字符串进行排序以最大化该值:

select id
from t
order by length(substring_index(ip_address, '.', 1) desc,
         substring_index(ip_address, '.', 1) desc,
         length(substring_index(ip_address, '.', 2) desc,
         substring_index(ip_address, '.', 2) desc,
         length(substring_index(ip_address, '.', 3) desc,
         substring_index(ip_address, '.', 3) desc,
         ip_address desc;

或者,您可以使用以下inet_功能:

select i.*
from t
order by inet_aton(ip_address) desc
limit 1;
         

推荐阅读