查询具有空格条件的XML列



我有一个表,其中一列是XML列。

表1:

Column1   Column2
1         XML value 

例如,在这里我需要找到具有前导空格的属性值。

这是XML列[上表中的第2列],这里BankAccountNumber标记有前导空格,所以我需要写一个查询来查找表中所有有前导空格的记录,你能帮我吗?

<PaymentMethodDetails>
<EFtDetails>
<routingNumber>5575776567</routingNumber>
<BankAccountNumber>1234 </BankAccountNumber>
</EFtDetails>
</PaymentMethodDetails>

很遗憾,SQL Server不支持starts-withends-with函数。但我们可以用substring来解决这个问题

substring(., 1, 1) = " "

要查找尾随空格而不是前导空格,请使用

substring(., string-length(.), 1) = " "

要查找任何以空格开头的BankAccountNumber节点,可以使用exist

SELECT *
FROM Table1 t1
WHERE t1.Column2.exist('
/PaymentMethodDetails/EFtDetails/BankAccountNumber/text()[substring(., string-length(.), 1) = " "]
') = 1;

要查找以空格开头的任何节点,可以使用//包含所有子节点

SELECT *
FROM Table1 t1
WHERE t1.Column2.exist('
//*[text()[substring(., string-length(.), 1) = " "]]
') = 1;

要实际将匹配的节点分解为单独的值,可以使用.nodes.value的组合

SELECT
x.nod.value('local-name(.)[1]','nvarchar(max)'),
x.nod.value('text()[1]','nvarchar(max)')
FROM Table1 t1
CROSS APPLY t1.Column2.nodes('
//*[text()[substring(., string-length(.), 1) = " "]]
') x(nod);

db<gt;小提琴

最新更新