Sql 如何通过删除空间查找标记值 declare@xxml='1〕 CRD001M-OPTIONI aaa WS-MENU-STACK1 WS-MENU-STACK2 WS-MENU-STACK3 WS-MENU-STACK4 WS-MENU-STACK5 WS-MENU-STACK6 WS-MENU-STACK7 WS-MENU-STACK8 WS-MENU-STACK9 WS-MENU-STACK10 WS-MENU-STACK-TALLING中的计数 '
在上面的XML标记中,标记具有按空格分隔的值 我正在努力使下面的字符串如下Sql 如何通过删除空间查找标记值 declare@xxml='1〕 CRD001M-OPTIONI aaa WS-MENU-STACK1 WS-MENU-STACK2 WS-MENU-STACK3 WS-MENU-STACK4 WS-MENU-STACK5 WS-MENU-STACK6 WS-MENU-STACK7 WS-MENU-STACK8 WS-MENU-STACK9 WS-MENU-STACK10 WS-MENU-STACK-TALLING中的计数 ',sql,sql-server,xml,xml-parsing,xml-serialization,Sql,Sql Server,Xml,Xml Parsing,Xml Serialization,在上面的XML标记中,标记具有按空格分隔的值 我正在努力使下面的字符串如下 declare @x xml = '<XML> <UNSTRING STATEMENTNUMBER="48515"> <STRING>CRD001M-OPTIONI</STRING> <DELIMITERS> <DELIMITER>aaa</DELIMITER>
declare @x xml = '<XML> <UNSTRING STATEMENTNUMBER="48515">
<STRING>CRD001M-OPTIONI</STRING>
<DELIMITERS>
<DELIMITER>aaa</DELIMITER>
</DELIMITERS>
<SUBSTRINGS>WS-MENU-STACK1 WS-MENU-STACK2 WS-MENU-STACK3 WS-MENU-STACK4 WS-MENU-STACK5 WS-MENU-STACK6 WS-MENU-STACK7 WS-MENU-STACK8 WS-MENU-STACK9 WS-MENU-STACK10 TALLYING IN WS-MENU-STACK-TALLY</SUBSTRINGS>
<DELIMITERSFOUND>
<DELIMITER>
</DELIMITER>
</DELIMITERSFOUND>
<INDICES>
<INDEX>
</INDEX>
</INDICES>
<POINTER>
</POINTER>
<TALLYING>
</TALLYING>
<ONOVERFLOW>
</ONOVERFLOW>
</UNSTRING></XML>'
declare@xxml='1〕
CRD001M-OPTIONI
aaa
WS-MENU-STACK1
WS-MENU-STACK2
WS-MENU-STACK3
WS-MENU-STACK4
WS-MENU-STACK5
WS-MENU-STACK6
WS-MENU-STACK7
WS-MENU-STACK8
WS-MENU-STACK9
WS-MENU-STACK10
理货
在里面
WS-MENU-STACK-TALLY
'
请在此帮助我如何通过替换或其他方式解决问题 我使用了replace函数,但无法找到值
在这里,
标记值按空格分隔,因此请查找每个值在值
之间,使用以下查询并享受其结果:
declare @x xml = '<XML> <UNSTRING STATEMENTNUMBER="48515">
<STRING>CRD001M-OPTIONI</STRING>
<DELIMITERS>
<DELIMITER>aaa</DELIMITER>
</DELIMITERS>
<SUBSTRINGS>WS-MENU-STACK1</SUBSTRINGS>
<SUBSTRINGS>WS-MENU-STACK2</SUBSTRINGS>
<SUBSTRINGS>WS-MENU-STACK3</SUBSTRINGS>
<SUBSTRINGS>WS-MENU-STACK4</SUBSTRINGS>
<SUBSTRINGS>WS-MENU-STACK5</SUBSTRINGS>
<SUBSTRINGS>WS-MENU-STACK6</SUBSTRINGS>
<SUBSTRINGS>WS-MENU-STACK7</SUBSTRINGS>
<SUBSTRINGS>WS-MENU-STACK8</SUBSTRINGS>
<SUBSTRINGS>WS-MENU-STACK9</SUBSTRINGS>
<SUBSTRINGS>WS-MENU-STACK10</SUBSTRINGS>
<SUBSTRINGS>TALLYING</SUBSTRINGS>
<SUBSTRINGS>IN</SUBSTRINGS>
<SUBSTRINGS>WS-MENU-STACK-TALLY</SUBSTRINGS>
<DELIMITERSFOUND>
<DELIMITER>
</DELIMITER>
</DELIMITERSFOUND>
<INDICES>
<INDEX>
</INDEX>
</INDICES>
<POINTER>
</POINTER>
<TALLYING>
</TALLYING>
<ONOVERFLOW>
</ONOVERFLOW>
</UNSTRING></XML>'
declare@xxml='1〕
CRD001M-OPTIONI
aaa
WS-MENU-STACK1 WS-MENU-STACK2 WS-MENU-STACK3 WS-MENU-STACK4 WS-MENU-STACK5 WS-MENU-STACK6 WS-MENU-STACK7 WS-MENU-STACK8 WS-MENU-STACK9 WS-MENU-STACK10 WS-MENU-STACK-TALLING中的计数
'
声明@T NVARCHAR(最大)=强制转换(@X为NVARCHAR(最大))
选择演员阵容(
替换(@T,
“+D.值(”,“VARCHAR(最大值)”+”,
''+替换(D.值('.'','VARCHAR(最大值)'','','')+''
)
(作为XML)
从@x.nodes('/XML/UNSTRING/substring')x(D)
declare @x xml = '<XML> <UNSTRING STATEMENTNUMBER="48515">
<STRING>CRD001M-OPTIONI</STRING>
<DELIMITERS>
<DELIMITER>aaa</DELIMITER>
</DELIMITERS>
<SUBSTRINGS>WS-MENU-STACK1 WS-MENU-STACK2 WS-MENU-STACK3 WS-MENU-STACK4 WS-MENU-STACK5 WS-MENU-STACK6 WS-MENU-STACK7 WS-MENU-STACK8 WS-MENU-STACK9 WS-MENU-STACK10 TALLYING IN WS-MENU-STACK-TALLY</SUBSTRINGS>
<DELIMITERSFOUND>
<DELIMITER>
</DELIMITER>
</DELIMITERSFOUND>
<INDICES>
<INDEX>
</INDEX>
</INDICES>
<POINTER>
</POINTER>
<TALLYING>
</TALLYING>
<ONOVERFLOW>
</ONOVERFLOW>
</UNSTRING></XML>'
DECLARE @T NVARCHAR(MAX) = CAST(@X AS NVARCHAR(MAX))
SELECT CAST(
REPLACE(@T,
'<SUBSTRINGS>'+D.value('.','VARCHAR(max)')+'</SUBSTRINGS>',
'<SUBSTRINGS>'+REPLACE(D.value('.','VARCHAR(max)'),' ','</SUBSTRINGS><SUBSTRINGS>')+'</SUBSTRINGS>'
)
AS XML)
FROM @x.nodes('/XML/UNSTRING/SUBSTRINGS') X(D)