按常规编程语言,这将是1行代码,但在SQL Server中似乎过于复杂。
给出一个表(是的,无需回答逗号分隔的值不应保留在列中):
| ID | List |
| 1 | AB,ABC,ABCD |
将“ AB”仅替换为“ XX”并存储回表中的最佳方法是什么?
答案 0 :(得分:2)
首先使用concat()
在末尾附加逗号,以便每个元素都用逗号括起来。然后使用replace()
替换元素,包括周围的逗号。最后,使用substring()
来获取字符串,在开头和结尾处都不要使用逗号。
UPDATE elbat
SET list = substring(replace(concat(',', list, ','), ',AB,', ',XX,'), 2, len(replace(concat(',', list, ','), ',AB,', ',XX,')) - 2);
答案 1 :(得分:0)
有点hacky和一团糟,并假设您的版本可以使用string_split,这将起作用:
DECLARE @TABLE TABLE (ID INT, List VARCHAR(100))
INSERT INTO @TABLE VALUES
(1, 'AB,ABC,ABCD')
SELECT ID
,STUFF((SELECT ', ' + CAST(IIF(value = 'AB', 'XX', value) AS VARCHAR(10)) [text()]
FROM @TABLE
CROSS APPLY string_split (List,',')
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM @TABLE t
返回:
ID List_Output
1 XX, ABC, ABCD