MySQL xml与列数据进行比较

时间:2014-08-27 17:36:33

标签: mysql sql xml xpath xquery

假设您有一张表' 城市'如下:

Id | CodeNumber | CityXml

您在CityXml列中存储了以下xml

<record>
  <data code="10">istanbul</data>
  <data code="20">madrid</data>
</record>

并且您想获得代码= 10的城市名称。为此,您可以写:

SELECT 
ExtractValue(Cities.CityXml, '/record/data[code="10"][1]') AS CityName
FROM Cities

这很好用。当代码编号从表的另一列给出时,我的问题就开始了:

/* this does not work */
SELECT 
CodeNumber,
ExtractValue(Cities.CityXml, '/record/data[code="CodeNumber"][1]') AS CityName
FROM Cities

在SQL Server中,您可以编写以下语句:

SELECT 
CodeNumber,
ExtractValue(Cities.CityXml, '/record/data[code=sql:column("CodeNumber")][1]') AS CityName
FROM Cities

但你怎么能在MySQL中写这个呢?

1 个答案:

答案 0 :(得分:2)

使用CONCAT

构建XPath字符串
SELECT CodeNumber,
       EXTRACTVALUE(Cities.City, CONCAT('/record/data/[code="', CodeNumber, '"][1]') AS CityName
FROM Cities