【发布时间】:2019-03-27 12:13:05
【问题描述】:
DECLARE @rpmProvider varchar(200) = 'Prudhvi, raj,Lalith, Kumar';
DECLARE @xml xml
DECLARE @XMT_TEXT AS VARCHAR(200)
SET @XMT_TEXT = REPLACE(REPLACE(REPLACE(''''+ @rpmProvider + '''', ', ', '|'), ',', '</X><X>'), '|', ', ')
SET @xml = cast(('<X>' + @XMT_TEXT + '</X>') as xml)
SELECT N.value('.', 'varchar(50)') as value
FROM @xml.nodes('X') as T(N);
我的输出:
1. 'Prudhvi, raj
2. Lalith, Kumar'
预期输出:
1. 'Prudhvi, raj'
2. 'Lalith, Kumar'
【问题讨论】:
-
为什么要添加3个不同sql-server版本的标签?只需标记您使用的那个!谢谢
-
实际的问题是如何解析包含成对值的字符串。最好的选择是在字符串到达服务器之前 这样做。 SQL 这种语言不适合字符串操作。
-
如果您删除所有与 XML 相关的代码并留下
select REPLACE(REPLACE(REPLACE(''''+ @rpmProvider + '''', ', ', '|'), ',', '</X><X>'), '|', ', '),您将看到</X><X>周围没有引号。将替换字符串改为'''</X><X>''',标签前后各有两个单引号
标签: sql sql-server sql-server-2012 sql-server-2008-r2 sql-server-2014-express