2015-10-01 3 views
0

Есть ли способ использовать функцию order by со значениями из столбца XML в PostgreSQL?Заказ по значению узла XML в PostgreSQL

Пример

Если у меня есть этот XML как столбец в моей базе данных PostgreSQL в столбце XML, есть способ, чтобы написать 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

В принципе, вам необходимо получить необходимые элементы XML с функцией xpath(). Затем обработайте все значения результата как тип 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

Спасибо Вам, что это было очень легко :) –

Смежные вопросы