with以下xml:
<Path>
<To>
<Value>
<Array>
<NumberDecimal>10.0</NumberDecimal>
<TextEnglish>Ten</TextEnglish>
<NumberRomanNumeral>X</NumberRomanNumeral>
</Array>
</Value>
</To>
</Path>
如何过滤以下十字应用程序应用于所有/仅Number***
XML节点?
SELECT child.value('concat(local-name(.),": ",.)', 'varchar(max)') AS [value]
FROM imports i
CROSS APPLY i.import_data.nodes('/Path/To/Value/Array/*[local-name(.) = ''NumberDecimal'']') AS nodes(child)
返回:
数字:10
需要这样:
SELECT child.value('concat(local-name(.),": ",.)', 'varchar(max)') AS [value]
FROM imports i
CROSS APPLY i.import_data.nodes('/Path/To/Value/Array/*[local-name(.) = ''Number/*'']') AS nodes(child)
需要返回:
数字:10
numberMannumeral:x
但是它没有返回....
您可以使用 [contains(local-name(.),'Number')]'
演示来查找名称包含字符串 Number
Declare @x xml = '<Path>
<To>
<Value>
<Array>
<NumberDecimal>10.0</NumberDecimal>
<TextEnglish>Ten</TextEnglish>
<NumberRomanNumeral>X</NumberRomanNumeral>
</Array>
</Value>
</To>
</Path>'
SELECT child.value('concat(local-name(.),": ",.)', 'varchar(max)') AS [value]
FROM (SELECT @x as import_data) i
CROSS APPLY i.import_data.nodes('/Path/To/Value/Array/*[contains(local-name(.),''Number'')]') AS nodes(child)
或 [substring(local-name(.),1,6) eq "Number"]
要查找字符串在某个位置的元素(在这种情况下为start)
对于更异国情调的任何事情,您最好在TSQL
中做到这一点WHERE child.value('local-name(.)', 'sysname') LIKE '[SomeExpression]'