【发布时间】:2021-07-22 06:54:30
【问题描述】:
我正在处理一个本地项目,我想在我称为serial 的 SQL Server 表中设置一个列。此值应具有下一个格式/验证[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]。四个包含数字或大写字母的字符。
例如,第一条记录是AAA0,然后从右到左开始递增,但有趣的是,一旦它到达AAA9,我想继续但要带字母,所以一旦到达9 ,继续答:AAAA。我的最后一个组合是AAAZ,然后继续第二个位置,依此类推,直到我可以完成ZZZZ。
Serial
------
AAA0
…
AAAZ
AAB0
…
AABZ
AAC0
…
AACZ
…
ZZZZ
我已经能够做类似的事情,但例如仅将数字 0000 递增到 9999 或仅使用字母 AAAA 到 ZZZZ(请参见下面的虚拟数据)。
如果您有任何 cmet,或者您以前是否见过这种情况,请告诉我。我将不胜感激。
我查看了互联网上的一些数据并做了这个小测试,但再次,这是改变字母。
CREATE TABLE #MyTable
(
MyHeadID INT IDENTITY(0,1) NOT NULL,
Consecutive AS
CHAR(MyHeadID/17576%26+65) + --26^3
CHAR(MyHeadID/676%26+65) + --26^2
CHAR(MyHeadID/26%26+65) + --26^1
CHAR(MyHeadID%26+65) --26^0
PERSISTED NOT NULL,
UniqueID VARCHAR(36) NOT NULL,
CreatedDate datetime DEFAULT GETDATE()
)
INSERT INTO #MyTable (UniqueID)
(SELECT NEWID())
SELECT Consecutive FROM #MyTable
我们先不讨论UniqueID 和CreatedDate 列,它们只是用于测试目的。我创建了一个标识列,然后创建了字母自动增量的代码。
我也在这里找到了这个reply,但这不是我的情况,因为在那个回复中,他们用一个子字符串来划分 4 个字母和 4 个数字,它可以解决。就我而言,我需要从右到左计算数字和字母。
【问题讨论】:
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 复制或键入问题中的文本。请保留将图像用于图表或演示渲染错误,这些无法通过文本准确描述的事情。请展示您尝试过的内容,并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
-
只需使用一个普通的 IDENTITY 列并寻找一个执行 base 36 编码的函数以您想要的格式呈现它
-
感谢@Dale K 的推荐。我没有尝试任何东西,因为我不知道这是否可能。我还没有在堆栈上找到任何东西。 -MG
-
@MoisesGonzaga 使用dbfiddle.uk 创建minimal reproducible example。
-
对最右边一列到达 Z 后的“编号”感到困惑,您期待
AAB0然后是AAB1 AAB2... AABZ, AAC0 etc?
标签: sql-server database tsql auto-increment