有没有办法在PostgreSQL中的XML列中使用order by
功能?
如果我在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 :(得分:1)
基本上,您需要使用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);