Sql-Server:在结果上使用REPLACE()函数后,将选择值拆分为多行

时间:2017-11-08 12:43:20

标签: sql sql-server

我有一个包含

等值的表格
1.<content><value>foo</value><value>bar</value></content>
2.<content><value>value3</value><value>value4</value></content>

我正在使用REPLACE函数删除所有标记(内容和值)并将</value>替换为;

的值
select CAST(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(CAST(TEXTVALUE as NVarchar(MAX))
,'<content>',''),'<value>','')
,'</value>',';')
,' ','')
,'</content>','')
AS NText) from dbo.mytable ...

我的select语句的输出如下所示:

1.foo;bar
2.value3;value4

然而 - 我想拆分这个select语句为每个值返回一个新行:

1. foo
2. bar
3. value3
4. value4

我已经看到很多答案和方法将select语句的结果拆分成多行,但我没有看到任何方法首先替换部分值然后将结果拆分为多个按行划分。

我希望你能在这里帮助我。

编辑:感谢您提供了许多有用的答案。我忘了添加,我也希望能够在同一个请求中选择其他列。

3 个答案:

答案 0 :(得分:1)

以下是使用xml nodes方法

的一种方法
SELECT id,Split.a.value('.', 'VARCHAR(100)')
FROM   (SELECT Cast(xmlcol AS XML) AS data,id
        FROM   Yourtable) a
       CROSS apply Data.nodes ('content/value') AS Split(a) 

答案 1 :(得分:0)

这应该可以解决问题:

    Float[][] pixels = new Float[][]{{1f,2f,3f},{1f,2f,3f}};
    Float[][] pixelArray = Arrays.stream(pixels)
                           .map(arr -> Stream.of(arr).chooseWhatYouWantToDo())
                           .toArray(Float[][]::new);

答案 2 :(得分:0)

root 元素中添加XML字符串。像这样

<root><content><value>foo</value><value>bar</value></content><content><value>value3</value><value>value4</value></content></root>

declare @xmlPath xml = '<root><content><value>foo</value><value>bar</value></content><content><value>value3</value><value>value4</value></content></root>';
SELECT 
    p.value('(text())[1]', 'VARCHAR(8000)') AS value
FROM @xmlPath.nodes('/root/content/value') AS a(p)

无需替换XML元素字符串。

也可以使用此功能。如果要将值提取到表格中。 textstring ==是字段名称

SELECT  
    p.value('(text())[1]', 'VARCHAR(8000)') AS value
FROM #tempTable temp
 CROSS APPLY  textstring.nodes('/content/value') AS a(p)