【问题标题】:upper case and lower case in xml.valuexml.value 中的大写和小写
【发布时间】:2017-04-13 18:36:53
【问题描述】:

我有两个 xml 版本,重命名“Serie”和“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]

【问题讨论】:

  • 你不能用Union All吗?
  • 会重复信息

标签: sql xml tsql


【解决方案1】:

在属性列表上调用.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)

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多