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