gpt4 book ai didi

sql - 使用 A999 > A1000 解决下一个最大问题

转载 作者:行者123 更新时间:2023-12-04 21:20:33 26 4
gpt4 key购买 nike

某些产品序列号的类型为 varchar,并有一个指示类型的字母,后跟一个数字。数字由 0 填充最多 5 位数字,我们接近“A100000”。

对于少于 100000 个项目的字母,他们仍然希望 0 填充最多 5 位数字,而超过 100000 的字母则有更多的数字,无论它是什么数字。

它目前找到当前的最大序列号,如下所示:

SELECT MAX(SerialNumber) FROM Table WHERE LEFT(SerialNumber, 1) = @leadingChar

但是,使用这种方法选择 'A99999' 而不是 'A100000',因为 9>1。 (同样的原因 Zoo 在字典中紧随 Apple 之后,更多的字符但前导字符的值(value)更少。)

所以问题是当它增加当前最大序列号以获得'A99999'之后的下一个序列号时,每次获得新序列号时,您将获得'A100000'。

将它们拆分为数据库中的 char 列和 int 列会很麻烦,因为它在多个表中使用并且总共有几百万个序列号。

它在 vbscript/classic asp 数据库是 SQL Server 7 中编写为 Web 应用程序。

如果有更好的标签/标题,请随时编辑/让我知道。

谢谢你的帮助。

最佳答案

您可以考虑采用 Matt Gibson 在 Coding Horror posting 的评论中描述的方法。关于自然排序。

As a data warehouse developer, I'm no stranger to the way business people expect to see things sorted, and it's never ASCII... One thing I do is to add extra columns to my databases and put in "corrected" versions of the keys I'm using, so my table might look like:

Customer Number|Customer|SortKey1
MS948|Fred Smith|MS00000948
MS9215|John Star|MS00009215

..which means I get to use SQL's standard ASCII sorting (indexed for speed, if need be) rather than muck around with anything in client applications. The client presents the real key to the user, but sorts by the pre-calculated ASCII-sort-safe key, and I only have to do the hard work once, up front.



这意味着向当前表添加一个额外的字段,该字段仅用于生成 key 。 “获取下一个键”代码将引用新字段,但也会填充现有字段,以便大多数代码和外键数据可以保持原样。

如果 SerialNumber 字段上有索引,您也可以考虑使用 SQL LIKE 运算符来查找 MAX。您发布的代码可能无法使用索引,因为您正在将函数应用于 WHERE 子句中的字段(我不熟悉 SQL Server 7 查询优化的细节,所以不能肯定地说) .

关于sql - 使用 A999 > A1000 解决下一个最大问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3580271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com