mysql - 在sql表中查找最大值

标签 mysql sql

我需要从具有 varchar 列的表中检索 sql MAX 结果,例如“MYNAME-0xxxxx”或“MYNAME-xxxxx”(固定字符串后跟减号后跟以零开头的 6 位数字或以 5 位数字开头一个非零)

我试过这个:

SELECT MAX(  substring( myColumn  , locate('-', myColumn) ) )  
FROM MyTable

通过这条语句,我能够达到“MYNAME-xxxx”这种形式的所有列值的最大数量,但它不适用于像“MYNAME-0xxxxx”这样的列

假设我们有

JOHN-12345
JOHN-12346
JOHN-012347

我希望我的结果是“012347”,但我的代码返回“12346”。在我看来,sql 中 12346 和 012347 之间的最大值是 12346。 请注意,数字是递增的,所以如果我们从 012347 开始,我们可以达到 999999

最佳答案

我还不能发表评论,所以我会在这里给出我的提示:

我认为问题在于您正在比较字符串。在这种情况下,SQL 查找字母顺序,1 高于 0,因此 string“0999”低于 string“1”。将其视为单词,单词“b”将排在单词“zaaa”之前。

将您要比较的字符串转换为数字,然后重试。

我希望我能解释一下。

关于mysql - 在sql表中查找最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57427281/

相关文章:

php - MYSQL:根据来自另一个表的 SELECT 更新行

mysql - 错误 : argument of AND must be type boolean, 未输入文本

指定 innodb 数据库类型和字符集时出现 MySQL 语法错误

mysql - 计算SQL中以下记录之间的距离

PHP mySQL LOAD LOCAL INFILE 导入正好一半?

javascript - 插入查询的语法不正确

sql - 了解 ILIKE 数组的任何元素 - postgresql

mysql - 使用MySQL查询替换整个表格中的文本

MySQL查询以查找仍在房间内的用户

sql - 如何使用原始 SQL 插入外键字段?