2017-09-08 65 views
1

我有一個表「用戶」與列「值」,其中有像這樣的XML數據的MySQL數據庫:提取XML在MySQL表列

<Attributes> 
    <Map> 
    <entry key="first" value="Linda"/> 
    <entry key="groups" value="Manager"/> 
    <entry key="last" value="Davis"/> 
    <entry key="locked" value="N"/> 
    <entry key="status" value="A"/> 
    </Map> 
</Attributes> 

我想提取它們喜歡:

Attributes_Values 
================= 
first = Linda 
groups = Manager 
last = Davis 

我嘗試了ExtractValue函數,但它返回null。

select ExtractValue(Values, '/Attributes/Map/entry[@key="first"]/entry/value') as Attribute_Values from Users; 

不確定是否可以使用單個查詢提取鍵值對。

回答

1

您已經知道key - 這就是您要過濾的內容,因此您只需要獲取相應的value即可。你可以用下面的XPath表達式做到這一點:

/Attributes/Map/entry[@key="first"]/@value 

您可以用鑰匙串聯返回值來獲得對:

select concat('first = ',ExtractValue(Values, '/Attributes/Map/entry[@key="first"]/@value')) as Attribute_Values 
from Users;