You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中获取字符串列的最大数值(修正SUBSTRING_INDEX结果异常)

问题原因

你当前的查询是对截取出来的字符串取最大值,字符串比较是按字符逐个对比的——999的第一个字符是9,比1000的第一个字符1大,所以字符串排序逻辑里999会被判定为更大的值,导致返回结果不符合预期。

解决办法

需要把截取到的前缀转换为数值类型(比如整数)后再计算最大值,不同数据库的实现写法略有区别:

MySQL/MariaDB

SELECT MAX(CAST(SUBSTRING_INDEX(nomor_request, '/', 1) AS UNSIGNED)) AS max_number FROM my_table;

也可以用CONVERT替代CAST:

SELECT MAX(CONVERT(SUBSTRING_INDEX(nomor_request, '/', 1), UNSIGNED)) AS max_number FROM my_table;

PostgreSQL

SELECT MAX(SUBSTRING_INDEX(nomor_request, '/', 1)::INTEGER) AS max_number FROM my_table;

或者使用标准CAST语法:

SELECT MAX(CAST(SUBSTRING_INDEX(nomor_request, '/', 1) AS INTEGER)) AS max_number FROM my_table;

SQL Server

SQL Server没有SUBSTRING_INDEX函数,需要用CHARINDEX定位分隔符位置后截取:

SELECT MAX(CAST(SUBSTRING(nomor_request, 1, CHARINDEX('/', nomor_request) - 1) AS INT)) AS max_number FROM my_table;
原理说明

将字符串形式的数字转换为数值类型后,数据库会按照数值大小进行比较,此时1000作为数值会大于999,就能得到正确的最大值结果。

内容的提问来源于stack exchange,提问作者Nay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:25:18