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

时间:2019-07-11 12:24:31

标签: mysql mysql-workbench

我需要从一列中选择最大值以生成序列号。问题在于列是字符串和数字值的混合,因此我无法从查询中获得最高的数值,因为列是字符串和数字值的混合。 该表是auctionsshipments的混合,因此这两个列共享。 如果我生成拍卖序列号,则在其前面添加A;如果我生成装运,则在其前面添加S。 https://imgur.com/a/ToZDvWd

我的查询

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;

如何解决此问题?

3 个答案:

答案 0 :(得分:2)

这确实表明在同一列中混合数字和文本是一个不好的主意。

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

现在,您将需要做一些事情以将该字段切碎并分离各个部分,以便可以进行适当的排序。例如这样的东西

<img id="image" src="" alt="Image">

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

答案 1 :(得分:0)

您可以结合使用sql函数-

SELECT CONVERT(SUBSTR(AuctionSerialNumber,2,LENGTH(id)-1),unsigned INTEGER),AuctionSerialNumber
 FROM auctions
ORDER BY CONVERT(SUBSTR(AuctionSerialNumber,2,LENGTH(id)-1),unsigned INTEGER) desc
limit 1

希望这对您的功能代码有所帮助。

提琴:  http://sqlfiddle.com/#!9/6f0553/6

答案 2 :(得分:0)

如果您在单个列中同时使用两个值。也许这是有道理的。 因此需要对完整数据应用排序技术。

select *,RIGHT(AuctionSerialNumber, length(AuctionSerialNumber)-1),left(AuctionSerialNumber, 1) from test_temp order by RIGHT(AuctionSerialNumber, length(AuctionSerialNumber)-1),left(AuctionSerialNumber, 1) asc