MYSQL如果值与字符串混合,如何选择列中的最高值

标签 mysql mysql-workbench

我需要从列中选择最高值才能生成序列号。问题是该列是字符串和数值的混合,因此我没有从查询中获得最高数值,因为该列是字符串和数值的混合。 该表混合了拍卖发货,因此该列为两者共享。 如果我生成拍卖序列号,我会在其前面添加 A;如果我生成发货,我会在其前面生成 S。 /image/XEAIc.jpg

我的查询

SELECT AuctionSerialNumber AS serialCount
    FROM auctions
    ORDER BY AuctionSerialNumber DESC LIMIT 1

获取最高序列号并加1的函数

let serialCount = results2[0].serialCount;
serialCount = serialCount.replace(/[AS]/g, '');
let tempSerialNumber = parseInt(serialCount, 10);
let nextSerial = tempSerialNumber + 1;
nextSerial = 'S' + nextSerial;

如何解决这个问题?

最佳答案

这确实表明在同一列中混合数字和文本是一个多么糟糕的主意。

最好将 int 和 char 部分放在 2 个单独的列中。

现在您需要做一些事情来分割该字段并将各个部分分开,以便您可以进行正确的排序。例如这样的事情

SELECT right(AuctionSerialNumber,length(AuctionSerialNumber)-1) as serialCount
FROM auctions
ORDER BY cast(right(AuctionSerialNumber,length(AuctionSerialNumber)-1) as unsigned) DESC
LIMIT 1

right(AuctionSerialNumber,length(acode)-1) 应该看到 S1234573 并仅返回 1234573 即仅返回数字部分,因此您不再需要其他代码中的正则表达式,因此您可以删除此行

serialCount = serialCount.replace(/[AS]/g, '');

关于MYSQL如果值与字符串混合,如何选择列中的最高值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56989134/

相关文章:

PHP $db PDO 连接错误

mysql - 如何绕过 'ON DELETE SET DEFAULT' 不被接受?

mysql - 查询计算特定日期 +/- 4 周内的数据

MySql Workbench SQL 查询语法错误

mysql - sys.innodb_buffer_stats_by_table...中的pages_hashed是什么?

mysql - 使用mySQL进行数据库设计

mysql - REPLACE 总是创建一个新行而不是替换

php - 选择列的总和并显示 top 3 MAX Sum with limit LIMIT

php - 更新一列中的完整数组值

mysql - 在cakephp中下载Blob文件