2015-10-01 64 views
0

有沒有辦法將order by功能與來自PostgreSQL中XML列的值一起使用?通過PostgreSQL中的XML節點值排序

如果我有這樣的XML作爲一個XML列我的PostgreSQL數據庫列,是否有寫select語句命令由<type>屬性的結果的呢?

<items> 
<item> 
    <id>1</id> 
    <name>Item #1</name> 
    <type>Hardware</type> 
</item> 
<item> 
    <id>2</id> 
    <name>Item #2</name> 
    <type>Software</type> 
</item> 
</items> 

謝謝。

回答

0

基本上,您需要獲得xpath()函數1st所需的XML元素。然後將所有結果值作爲TEXT類型進一步處理(您無法將GROUP BY標識符應用於Postgres XML類型)。實際的查詢可能是以下幾點:

WITH extracted_data AS (
    SELECT id,unnest(xpath('//type/text()',data))::TEXT AS item_type 
    FROM xml_test 
) 
SELECT id,item_type FROM extracted_data 
ORDER BY id,item_type DESC; 

例DDL和數據:

-- Sample DDL 
CREATE TABLE xml_test (
    id SERIAL PRIMARY KEY, 
    data XML 
); 
-- Sample Data 
INSERT INTO xml_test(data) VALUES 
    ('<items> 
     <item> 
     <id>1</id> 
     <name>Item #1</name> 
     <type>Hardware</type> 
     </item> 
     <item> 
     <id>2</id> 
     <name>Item #2</name> 
     <type>Software</type> 
     </item> 
    </items>'::XML), 
('<items> 
     <item> 
     <id>3</id> 
     <name>Item #3</name> 
     <type>Middleware</type> 
     </item> 
     <item> 
     <id>4</id> 
     <name>Item #4</name> 
     <type>Other</type> 
     </item> 
    </items>'::XML); 
+0

謝謝這是非常容易的:) –