【问题标题】:How do I SELECT multiple values from a function into separate columns?如何将函数中的多个值选择到单独的列中?
【发布时间】:2019-04-03 22:08:32
【问题描述】:

这是我的查询

SELECT
    *
FROM (
    SELECT 
        getlatlng("geom")
    FROM
        mytable
) AS subquery;

返回

(-121.9,36.4)
(-117.1,32.9)
(-121.9,36.5)
(-71.2,42.6)

我想写

SELECT
    subquery.lat, subquery.lon 
FROM (
    SELECT 
        getlatlng("mygeom")
    FROM
        mytable
) AS subquery;

并让它返回

lat  | lon
-------------
36.4 | -121.9
32.9 | -117.1
36.5 | -121.9
42.6 | -71.2

这里是函数的相关位。

CREATE OR REPLACE FUNCTION getlatlng(geom geometry, OUT longitude text, OUT latitude text)
 RETURNS record
 LANGUAGE sql
 IMMUTABLE
AS $function$
SELECT ...;
$function$

【问题讨论】:

  • Postgresql有返回表的概念吗?
  • @JacobH 我相信是的,尽管如此,我仍然有点像 Postgres 菜鸟,所以请持保留态度。另外我应该提到我不能更改函数,因为它在代码库中的许多其他地方使用。

标签: sql postgresql set-returning-functions


【解决方案1】:

试试:

SELECT (p).longitude, (p).latitude FROM (
    SELECT getlatlng("mygeom") p 
      FROM mytable
) subquery

函数的OUT参数定义返回记录的列。

Example fiddle.

【讨论】:

  • 已编辑正确答案,很抱歉造成混乱!
  • @LaurenzAlbe 哦,对不起,你试过了吗?不?那么也许不要投反对票。函数的 OUT 参数用作记录列的定义。 Here you go, see it for yourself.
  • 我没有看到OUT 参数。抱歉,我的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
相关资源
最近更新 更多