需要将字母数字字符更改为下一个字符

Raj*_*tel 4 sql-server

我有 2 列NamePassport No.在一个超过 100k 行的表中。

Name   Passport No.
KOP    A245
COS    C990
Run Code Online (Sandbox Code Playgroud)

更新后应该是这个样子。

Name   Passport No.
LPQ    B356
DPT    D001
Run Code Online (Sandbox Code Playgroud)

用数据库中的下一个字符更新当前字符。我不想从表中选择任何东西,我想更新表。

请不要问我为什么。

Mik*_*son 7

使用数字表拆分字符串并使用 case 语句确定字符应具有的值并for xml path重建字符串。

将逻辑放在一个函数中,以便它可以重用于多列。

create function dbo.SS(@S varchar(max))
returns table as return
(
  select
  (
    select case
            when S.C = '9' then '0'
            when S.C = 'Z' then 'A'
            when S.C like '[A-Z,0-9]' then char(ascii(S.C) + 1)
            else S.C -- Keep not A-Z,0-9 as is
          end  
    from Number as N
      cross apply (select substring(@S, N.N, 1)) as S(C )
    where N.N between 1 and len(@S)
    for xml path(''), type
  ).value('text()[1]', 'varchar(max)') as C
)
Run Code Online (Sandbox Code Playgroud)

这将是您的更新声明。

update YourTable
set Name = (select C from dbo.CC(Name)),
    [Passport No.] = (select C from dbo.CC([Passport No.]))
Run Code Online (Sandbox Code Playgroud)