替换字符串中的字符而不影响名称

Chr*_*s U 5 sql t-sql sql-server

我试图删除字符串中的某些字符而不将它们从人名中删除。

我曾尝试使用嵌套REPLACE语句,添加多个CASE WHEN...THEN...ELSE语句,但我正在努力用代码覆盖所有基础

在我的表中,我有带有前缀和后缀的人名,用于在许多情况下表示该人的状态。

这是表中数据的示例

ZZScott Buzzton SC

我需要从这里删除“ZZ”和“SC”文本,然后离开Scott Buzzton

通过这些CASE陈述,我无法获得涵盖所有内容而无需嵌套层的东西

CASE
WHEN LEFT ( 'text' , 2 ) = 'ZZ' THEN STUFF ( 'text' , 1 , 2 , '' )
WHEN RIGHT ( 'text' , 2 ) = 'SC' THEN STUFF ( 'text' , LEN ( 'text' ) - 2 ) , 2 , '' )
ELSE 'text'
END
Run Code Online (Sandbox Code Playgroud)

这只会删除“ZZ”或“SC”,但不会同时删除两者。我想知道是否可以做一些简单的事情来删除它们而不涉及更改表中的数据,因为这可能会破坏许多报告以及我们的应用程序

补充:“ZZ”和“SC”只是两个例子,可能还有其他文本用于表示状态

Gor*_*off 3

apply是一种方法:

from t cross apply
     (values (case when t.col like 'ZZ%' then stuff(t.col, 1, 2, '') else col end)
     ) v1(col) cross apply
     (values (case when v1.col like ' SA%' then left(v1.col, len(v1.col) - 3) else v1.col end)
     ) v2(col)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用暴力:

(case when t.col like 'ZZ% SA'
      then substring(col, 3, len(col) - 5)
      when t.col like '% SA'
      then left(col, len(col) - 3)
      when t.col like 'ZZ%'
      then stuff(col, 1, 2, '')
      else col
 end)
Run Code Online (Sandbox Code Playgroud)