我有 2 列Name,Passport 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)
用数据库中的下一个字符更新当前字符。我不想从表中选择任何东西,我想更新表。
请不要问我为什么。
使用数字表拆分字符串并使用 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)
| 归档时间: |
|
| 查看次数: |
1291 次 |
| 最近记录: |