我有一个包含
等值的表格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语句的结果拆分成多行,但我没有看到任何方法首先替换部分值然后将结果拆分为多个按行划分。
我希望你能在这里帮助我。
编辑:感谢您提供了许多有用的答案。我忘了添加,我也希望能够在同一个请求中选择其他列。
答案 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)