Sql server 替换存储在列中的逗号分隔列表中的值
这在普通编程语言中是一行代码,但在SQL Server中似乎过于复杂 给定一个表(是无需回答逗号分隔的值不应保留在列中):Sql server 替换存储在列中的逗号分隔列表中的值,sql-server,tsql,Sql Server,Tsql,这在普通编程语言中是一行代码,但在SQL Server中似乎过于复杂 给定一个表(是无需回答逗号分隔的值不应保留在列中): 例如,将“AB”替换为“XX”并存储在表中的后面的最佳方法是什么?首先使用concat()在末尾附加COMA,以便每个元素都用逗号括起来。然后使用replace()替换元素,包括周围的逗号。最后,使用substring()获取开头和结尾不带逗号的字符串 UPDATE elbat SET list = substring(replace(concat(',',
例如,将“AB”替换为“XX”并存储在表中的后面的最佳方法是什么?首先使用
concat()
在末尾附加COMA,以便每个元素都用逗号括起来。然后使用replace()
替换元素,包括周围的逗号。最后,使用substring()
获取开头和结尾不带逗号的字符串
UPDATE elbat
SET list = substring(replace(concat(',', list, ','), ',AB,', ',XX,'), 2, len(replace(concat(',', list, ','), ',AB,', ',XX,')) - 2);
首先使用
concat()
在末尾附加COMA,以便每个元素都用逗号括起来。然后使用replace()
替换元素,包括周围的逗号。最后,使用substring()
获取开头和结尾不带逗号的字符串
UPDATE elbat
SET list = substring(replace(concat(',', list, ','), ',AB,', ',XX,'), 2, len(replace(concat(',', list, ','), ',AB,', ',XX,')) - 2);
有点老掉牙,乱七八糟,假设您的版本可以使用string\u 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
有点黑客和混乱,假设您的版本可以使用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
全部为“AB”还是仅为不同的值AB?您使用的是什么版本的sql server?在较新的函数中,有一些漂亮的函数可能是有用的“AB”。SQL Server 2017您认为,在SQL Server中这似乎过于复杂。。。。然而,您不希望被提醒1NF;-)全部为“AB”还是仅为不同的值AB?您使用的是什么版本的sql server?在较新的函数中,有一些漂亮的函数可能是有用的“AB”。SQL Server 2017您认为,在SQL Server中这似乎过于复杂。。。。然而,您不希望被提醒1NF;-)这很难看,但效率很高,+1从我这边;-)这很难看,但效率很高,+1从我这边;-)我不知道这是否重要,但这种方法不能保证以相同的排序重新创建列表(好吧,我从来没有遇到过任何问题,但可能有一些情况…)。此外,您正在添加一个带有逗号的空格,但这很容易解决…我不知道这是否重要,但这种方法不能保证以相同的排序重新创建列表(嗯,我从未遇到过任何问题,但可能会有情况…)。此外,您正在添加一个带有逗号的空格,但这很容易解决。。。