Man*_*aha 4 sql t-sql sql-server
我已经在 nvarchar 列中填充了一些字符串值。字符串的格式如下:
例如:16B、23G、128F、128M等...
我需要从中找出最大值,然后从代码生成下一个值。拾取最大物品的逻辑如下:
例如,上述系列中最大的字符串是128M。
现在我需要生成下一个序列。下一个字符串将有
谁能告诉我什么样的 SQL 可以得到我想要的字符串。
如果您可以更改表定义(*),则将基本值完全保留为数字并仅格式化为这些字符串会更容易:
create table T (
CoreValue int not null,
DisplayValue as CONVERT(varchar(10),(CoreValue / 26)+1) + CHAR(ASCII('A') + (CoreValue-1) % 26)
)
go
insert into T (CoreValue)
select ROW_NUMBER() OVER (ORDER BY so1.object_id)
from sys.objects so1,sys.objects so2
go
select * from T
Run Code Online (Sandbox Code Playgroud)
结果:
CoreValue DisplayValue
----------- ------------
1 1A
2 1B
3 1C
4 1D
5 1E
6 1F
....
22 1V
23 1W
24 1X
25 1Y
26 2Z
27 2A
28 2B
29 2C
....
9593 369Y
9594 370Z
9595 370A
9596 370B
9597 370C
9598 370D
9599 370E
9600 370F
9601 370G
9602 370H
9603 370I
9604 370J
Run Code Online (Sandbox Code Playgroud)
因此插入新值就像从列中取出MAX并加 1 一样简单(假设可序列化隔离或类似的,以处理多个用户)
(*) 即使您无法更改表定义 - 我仍然会生成此表。然后,您可以将其连接到原始表,并使用它对列执行简单的操作MAX,int然后添加一个并查找要使用的下一个字母数字值。只需填充您期望使用的尽可能多的值即可。