不使用循环 REPLACE 函数替换字符

sha*_*ham 6 sql-server

我的 SQL Server 数据库输入值遵循第一个位置是一个字符,然后是数字的模式。我想用另一个或多个字符替换第一个字符。例如:

输入

  1. Q234567888
  2. R264747848
  3. B264712481

输出

  1. I234567888
  2. I264747848
  3. U264712481

第一个位置的潜在值为[A-Z]

我正在寻找一个不使用多个REPLACE语句且不使用CASE.

如果我使用CASE,我将不得不检查 26 个案例,或者如果我REPLACE以嵌套方式使用,我最终可能会使用 26 个REPLACE语句。我正在努力避免这些。

请提出任何更好的方法来实现结果。

Mik*_*son 6

表值构造函数中创建旧值和新值之间的映射,并使用stuff替换字符。

declare @T table(Value varchar(10));

insert into @T values
('Q234567888'),
('R264747848'),
('B264712481');

select stuff(T.Value, 1, 1, (
                            select V.NewValue
                            from (values('Q', 'I'),
                                        ('R', 'I'),
                                        ('B', 'U')) as V(OldValue, NewValue)
                            where V.OldValue = left(T.Value, 1)
                            ))
from @T as T;
Run Code Online (Sandbox Code Playgroud)