xml.value中的大写和小写

时间:2017-04-13 18:36:54

标签: sql xml tsql

我有两个xml版本,重命名为" Serie"和"系列" 有没有办法只有一个查询?

SELECT Top 10 folioF,  
XMLCFDI.value('(./*:Comprobante/@Serie)[1]','varchar(25)') AS serie
FROM [Comprobantes].[dbo].[CFDI]

SELECT Top 10 folioF,  
XMLCFDI.value('(./*:Comprobante/@serie)[1]','varchar(25)') AS serie
FROM [Comprobantes].[dbo].[CFDI]

1 个答案:

答案 0 :(得分:0)

使用属性列表.nodes()调用检查这些方法:

DECLARE @xml XML=
N'<root>
<test serie="lower"/>
<test Serie="camel"/>
<test SERIE="upper"/>
<test Other="Other"/>
</root>';

SELECT attr.value('.','nvarchar(max)') AS attrVal
      ,attr.value('local-name(.)','nvarchar(max)') AS attrName
FROM @xml.nodes('/root/test') AS A(tst)
CROSS APPLY tst.nodes('@*') AS B(attr)

或者,您可以使用谓词限制结果(更改最后一行):

CROSS APPLY tst.nodes('@*[lower-case(local-name())="serie"]') AS B(attr)

另一种方法

SELECT tst.value('(./@*[lower-case(local-name())="serie"])[1]','nvarchar(max)')
FROM @xml.nodes('/root/test') AS A(tst)