📜  多个替换值 mssql (1)

📅  最后修改于: 2023-12-03 15:08:10.497000             🧑  作者: Mango

多个替换值 MSSQL

在 MSSQL 中,我们可以通过 REPLACE 函数来替换一个字符串中的某一个值。但是如果需要一次性替换多个值,就需要借助其他方法。

使用 CASE WHEN

一种方法是使用 CASE WHEN 语句。例如,我们想要将一个字符串中的 "A" 替换为 "1","B" 替换为 "2","C" 替换为 "3",可以这样写:

SELECT 
   CASE 
      WHEN column_name LIKE '%A%' THEN REPLACE(column_name, 'A', '1')
      WHEN column_name LIKE '%B%' THEN REPLACE(column_name, 'B', '2')
      WHEN column_name LIKE '%C%' THEN REPLACE(column_name, 'C', '3')
      ELSE column_name
   END
FROM table_name

上面的语句将会遍历 column_name 列中的每一行,如果发现其中包含 "A",则将 "A" 替换为 "1";如果包含 "B",则将 "B" 替换为 "2";如果包含 "C",则将 "C" 替换为 "3"。如果字符串中没有这些字符,就不做修改,直接返回原值。

使用 XML PATH 和 STUFF

另一种方法则是使用 XML PATH 和 STUFF。这种方法相对比较繁琐,但是可以适用于任意多的替换值。假设我们需要将一个字符串中的 "A" 替换为 "1","B" 替换为 "2","C" 替换为 "3":

SELECT 
   column_name,
   STUFF(
      (SELECT ',' + 
              CASE 
                 WHEN CHARINDEX('A', column_name) > 0 THEN '1'
                 WHEN CHARINDEX('B', column_name) > 0 THEN '2'
                 WHEN CHARINDEX('C', column_name) > 0 THEN '3'
                 ELSE ''
              END 
       FROM table_name
       WHERE id = t.id
       FOR XML PATH('')), 1, 1, '') AS replaced_value
FROM table_name AS t

这里的 CHARINDEX 函数用于检查字符串中是否包含某一个字符。STUFF 函数则是用来替换指定位置的字符串。

上述语句首先遍历 table_name 表中的每一行,检查 column_name 是否包含要替换的字符。如果一个字符也没有找到,就在 CASE 语句中返回一个空字符串。将所有的替换值用逗号隔开,并用 XML PATH 将它们拼成一个 XML 字符串。最后通过 STUFF 函数将逗号替换为一个空字符串,即得到最终的替换结果。

参考资料:MSSQL:用 CASE WHEN 和别名处理多重重命名