📅  最后修改于: 2023-12-03 15:08:10.497000             🧑  作者: Mango
在 MSSQL 中,我们可以通过 REPLACE
函数来替换一个字符串中的某一个值。但是如果需要一次性替换多个值,就需要借助其他方法。
一种方法是使用 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。这种方法相对比较繁琐,但是可以适用于任意多的替换值。假设我们需要将一个字符串中的 "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
函数将逗号替换为一个空字符串,即得到最终的替换结果。