首页 > 解决方案 > 在 MySQL 中使用 XML 数据从文本字段中选择查询

问题描述

我将 XML 数据存储在 MySQL 表的文本列中,我想通过选择查询获取子注释,但没有返回任何结果。

表中的数据

<Attributes>
  <Map>
    <entry key="accessRequired" value="Yes"/>
    <entry key="company" value="0001"/>
    <entry key="companyName" value="ABC Inc"/>
    <entry key="contractorEndDate" value="11/15/2020"/>
    <entry key="contractorStartDate" value="10/10/2019"/>
    <entry key="costCenter" value="1234"/>
    <entry key="costCenterName" value="design &amp; develop"/>
    <entry key="country" value="US"/>
    <entry key="departmentAdminEmail" value="testadmin@abc.com"/>
      <value>
        <Map>
          <entry key="Rule" value="123456hgfjuykuiykui"/>
        </Map>
      </value>
    </entry>
  </Map>
</Attributes>

我用来读取数据的查询

select display_name, SUBSTRING_INDEX(ExtractValue(attributes,'/attributes/map/departmentAdminEmail'),' ',1) from table1 where display_name like 'John%';

只想列出电子邮件地址字段,你们能帮我查询一下吗?

标签: mysqlxmltext

解决方案


您的 Xpath 正在寻找一个<departmentAdminEmail>元素。要搜索具有属性值的元素,您必须使用[@key="departmentAdminEmail"]

要提取属性的值,您需要使用/@value.

所以应该是

select display_name, ExtractValue(attributes,'/attributes/map/entry[@key="departmentAdminEmail"]/@value') AS email
from table1 
where display_name like 'John%';

请参阅XPath 以通过属性值选择元素MySql 查询以检索 xml 元素属性的值


推荐阅读