从一组选择为特定 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
我正在尝试生成一组 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