从一组选择为特定 table 和列的整数值生成 int4range

Generate int4range from a set of integer values selecting as a specific table and column

我正在尝试生成一组 int4range 值,但我得到的不是 int4range,而是类型 record。我似乎无法提取范围或转换为范围类型。

我特别想保留 sql 的 SELECT "app_table"."id" 部分,因为我试图操纵 ORM 将其映射到应用程序。

我尝试过的:

SELECT "app_table"."id" FROM (
    SELECT id FROM (
        SELECT (lag(a) OVER()), a, '[)'
            FROM generate_series(0, 10, 1)
            AS a OFFSET 1) AS id
) AS app_table LIMIT 3;

我得到的:

     id (type of record)
------------------------
1    (0,1,"[)")
2    (1,2,"[)")
3    (2,3,"[)")

另一次尝试:

SELECT "app_table"."id" FROM (
    SELECT (lag(id) OVER()), id, '[)'
        FROM generate_series(0, 10, 1)
        AS id OFFSET 1
) AS app_table

我得到的:

     id (type of integer)
------------------------
1    1
2    2
3    3

我想要达到的目标:

     id (type of int4range)
---------------------------
1    [0,1)
2    [1,2)
3    [2,3)

我确定这很简单,而且我尝试了很多变体,但我一无所获。

SELECT "app_table"."id"
FROM  (
   SELECT int4range(a, a+1) AS id
   FROM   generate_series(0, 2) a
   ) app_table;

db<>fiddle here

生成您想要的结果。

要从 integer 生成类型 int4range,请使用相应的函数 int4range()
阅读有关 Constructing Ranges and Multiranges.

的手册

你已经用 table 别名做对了:

I specifically want to keep the SELECT "app_table"."id" part of the sql