使用PostgreSQL xpath函数并从数组中获取第一个返回值

时间:2017-08-13 23:50:28

标签: arrays postgresql xpath

一般来说:如果PostgreSQL函数返回一个数组,我是否可以访问其中一个枚举值而无需创建子查询?

具体来说,这是我正在尝试做的一个抽象的例子:

SELECT
    xpath('/a/text()', subquery.xmlvalue)
FROM (
    SELECT '<a>theValue</a>'::xml xmlvalue
) subquery ;

...返回一个数组:

   xpath    
------------
 {theValue}
(1 row)

...但我想要的是这个数组的第一个(也是唯一的,在这种情况下)值:

   xpath    
------------
 theValue
(1 row)

...所以,我的问题是,这是(在一个子查询下面)唯一的方法吗,或者有没有办法在没有subquery2的情况下做到这一点?

SELECT subquery2.xpatharray[1] FROM (
    SELECT
        xpath('/a/text()', subquery.xmlvalue) xpatharray
    FROM (
        SELECT '<a>theValue</a>'::xml xmlvalue
    ) subquery
) subquery2 ;

...因为这确实工作:

SELECT
    xpath('/a/text()', subquery.xmlvalue)[1]
FROM (
    SELECT '<a>theValue</a>'::xml xmlvalue
) subquery ;

...并且错误消息是:

ERROR:  syntax error at or near "["
LINE 2:         xpath('/a/text()', subquery.xmlvalue)[1]
                                                     ^

1 个答案:

答案 0 :(得分:0)

嗯,我觉得很傻......但是在这个网站上允许并鼓励回答一个人自己的问题...

您所要做的就是将xpath函数放在另一组括号中:

SELECT
    (xpath('/a/text()', subquery.xmlvalue))[1]
FROM (
    SELECT '<a>theValue</a>'::xml xmlvalue
) subquery ;