mysql - 如何获得 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 |
解决方案
这在 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;
推荐阅读
- twilio - 如何从 Twilio Studio 创建一个 http 请求
- stored-procedures - 使用存储过程透视表
- tfs - 是否可以从 TFS(或 Azure DevOps)导出/导入板配置
- grep - 显示不以一个或多个字母开头且不以一个或多个数字结尾的行
- node.js - 导出带有添加方法的模块返回对象
- reactjs - useEffect 更新后的本地状态行为
- arduino - 如何使用 Arduino Uno 在不同状态之间切换?
- python - 按索引访问 Python 列表
- mysql - 在 MySql 中将随机数据插入到表中
- mysql - 尽管没有冲突,但 MySQL 列权限会覆盖全局权限