sql - 在SQL查询中从xml中提取数据

标签 sql sql-server xml xml-parsing

我正在尝试查询 SQL 2008R2 数据库 Surveillance并提取 MacAddress此 XML 列的值 Settings在表中Hardware我对 SQL 查询是全新的,但学习得很快。任何建议将不胜感激。

<properties>
  <settings hwid="hardware">
    <setting typeid="DAF813F8-2E02-4AE5-9F0F-B0FB203D3CB6">
      <name>ProductID</name>
      <value>AxisP3301</value>
    </setting>
    <setting typeid="F9D27CE8-8FA9-4B91-8C85-3E80DE7EF0AB">
      <name>MacAddress</name>
      <value>00408CC3ABCF</value>
    </setting>
    <setting typeid="FC714851-E998-4738-A140-F4FF20E99DEB">
      <name>FirmwareVersion</name>
      <value>5.40.9.2</value>
    </setting>
    <setting typeid="F1DED00E-9614-475F-A6F7-BA29FCA8DE39">
      <name>SerialNumber</name>
      <value>00408CC3ABCF</value>
    </setting>
    <setting typeid="5BE128A3-BDEC-4FEE-8690-D575DF03E3EE">
      <name>Bandwidth</name>
      <value>Unlimited</value>
    </setting>
    <setting typeid="188A93DE-67D8-417E-BCFC-FF5B3F74434A">
      <name>AudioEncoding</name>
      <value>G711</value>
    </setting>
    <setting typeid="5ADCDA37-78B3-4AB9-93E5-966EDE722FA3">
      <name>AlertEventServerIP</name>
      <value />
    </setting>
    <setting typeid="922AAF32-821A-4E24-A646-72A4AE592364">
      <name>AlertEventServerPort</name>
      <value>0</value>
    </setting>
    <setting typeid="18BF9B14-D675-40A1-B57D-90A03272468A">
      <name>SmtpEventServerIP</name>
      <value />
    </setting>
    <setting typeid="5F614912-4C46-453E-9043-3BFC15321E56">
      <name>SmtpEventServerPort</name>
      <value>25</value>
    </setting>
    <setting typeid="9F739984-A2C0-4E09-AAB6-97F229E9F208">
      <name>InternalEventServerIP</name>
      <value>25</value>
    </setting>
    <setting typeid="59094737-81C6-4FC2-B748-0005C390A775">
      <name>AttachmentSavePath</name>
      <value />
    </setting>
    <setting typeid="AF8875BC-7B45-4EBC-92DC-4E3959810A2E">
      <name>InternalEventServerPort</name>
      <value />
    </setting>
    <setting typeid="2B22F067-7AA4-4486-A206-85CBE3BE3285">
      <name>HTTPSPort</name>
      <value>443</value>
    </setting>
    <setting typeid="DA6E7891-54FA-4902-8164-75A790C11F17">
      <name>HTTPSEnabled</name>
      <value>no</value>
    </setting>
  </settings>
</properties>

最佳答案

您可以使用函数value()并更正 XQuery 以获得您需要的结果:

SELECT Settings.value('(/properties/settings/setting[name="MacAddress"]/value/text())[1]', 'varchar(255)') as MacAddress 
FROM Hardware

在这里您可以找到 setting 元素,该元素的子元素 name 的值为 MacAddress,并获取其子元素 value 的文本。使用 value() 函数时,您需要提供数据类型,因此在本例中以 varchar(255) 形式提供。

这里是 SQL Fiddle 的链接

关于sql - 在SQL查询中从xml中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30738056/

相关文章:

sql-server - 链接的 SQL Server 数据库出现 "inconsistent metadata"错误

sql - 在一列中显示所有表 SQL 的所有文本字段

sql-server - ADO 与 OLE DB 有什么关系?

python - 是否可以使用正则表达式直接更改字符串而不是返回更改后的字符串版本?

r - 在R中查找html表名并抓取

sql - 事件记录 : Find collection based on sum of two associated tables

android - 有没有办法直接从 Android 应用程序访问 MSSQL 数据库?

sql - 从另一个表中提取的条件更新 - Access 语法错误

由于 "duplicate entry",删除后mysql插入失败

Java 如何比较 XML 数据与文件扩展名