回答

收藏

SQL代码以字母数字字符串生成下一个序列

技术问答 技术问答 288 人阅读 | 0 人回复 | 2023-09-12

我已经在nvarchar列中填充了一些字符串值。字符串的格式如下:( M2 k1 g5 G8 @+ q
例如:16B,23G,128F,128M等…* ~: J& q3 |" o) r
我需要找出最大值,然后从代码中生成下一个。提取最大物品的逻辑如下:. J* B/ ^9 A$ L: p# z" a: v- B
[ol]捡起编号最大的字符串。
% V$ G0 [8 S8 W若有多个最大数字,则选择最大字母字符串。[/ol]例如,上述系列中最大的字符串是128M。
$ `% q8 d* L1 c9 U+ O: J% e' H现在,我需要生成下一个序列。下一个字符串将有
  P- R9 s+ X7 j3 F: N  \9 y[ol]与最大数字相同,但字母增加1。IE 128N, X0 o6 ?  r# e4 K* `
若字母达到Z,数字增加1,字母为A。比如下一个128Z字符串为129A。[/ol]任何人都能让我知道什么样的SQL为我提供所需的字符串。
8 c7 u5 k4 x( \) F' I# v                                                                1 ?( E2 Y# r. h2 w6 b
    解决方案:                                                                * e4 F' Y: U4 ]1 J; B2 D% I; T
                                                                假设:. Q7 s1 G' f6 P' T% `
CREATE TABLE MyTable    ([Value] varchar(4));INSERT INTO MyTable    ([Value])VALUES    (16)B G F M');你可以做:9 }$ e& a1 }7 X* Q+ k! }: U3 Y3 k2 G
select top 1     case when SequenceChar = 'Z' then        cast((SequenceNum   1) as varchar)   'A'    else        cast(SequenceNum as varchar)   char(ascii(SequenceChar)  1)    end as NextSequencefrom  select Value,        cast(substring(Value,1,CharIndex - 1) as int) as SequenceNum,        substring(Value,CharIndex,len(Value)) as SequenceChar    from      select Value,patindex('%[A-Z]%',Value) as CharIndex        from MyTable   ) a) border by SequenceNum desc,SequenceChar descsqlfiddle
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则