如何在 Postgres 中存储日期范围数组?
How to store an array of date ranges in Postgres?
我正在尝试建立一个时间表,我在客户端生成了一个包含日期范围的对象数组
[
{start: "2020-07-06 0:0", end: "2020-07-10 23:59"},
{start: "2020-07-13 0:0", end: "2020-07-17 23:59"}
]
我有一个类型为 daterange[]
的列,格式化此数据以将其插入我的 table 的正确方法是什么?
这是我目前拥有的:
INSERT INTO schedules(owner, name, dates) VALUES (
1,
'work',
'{
{[2020-07-06 0:0,2020-07-10 23:59]},
{[2020-07-13 0:0,2020-07-17 23:59]}
}'
)
我想你想要:
insert into schedules(owner, name, dates) values (
1,
'work',
array[
'[2020-07-06, 2020-07-11)'::daterange,
'[2020-07-13, 2020-07-18)'::daterange
]
);
理由:
你正在使用 daterange
s,所以你不能有时间部分(为此,你需要 tsrange
);正如您的代码所代表的那样,您似乎想要一个包容性下限和一个独占性上限(因此 [
在左侧, )
在右侧)
需要显式转换,以便 Postgres 可以识别数组元素具有正确的数据类型(否则,它们看起来像 text
)
然后,您可以用 array[]
构造函数
包围范围列表
owner | name | dates
----: | :--- | :----------------------------------------------------
1 | work | {"[2020-07-06,2020-07-11)","[2020-07-13,2020-07-18)"}
我正在尝试建立一个时间表,我在客户端生成了一个包含日期范围的对象数组
[
{start: "2020-07-06 0:0", end: "2020-07-10 23:59"},
{start: "2020-07-13 0:0", end: "2020-07-17 23:59"}
]
我有一个类型为 daterange[]
的列,格式化此数据以将其插入我的 table 的正确方法是什么?
这是我目前拥有的:
INSERT INTO schedules(owner, name, dates) VALUES (
1,
'work',
'{
{[2020-07-06 0:0,2020-07-10 23:59]},
{[2020-07-13 0:0,2020-07-17 23:59]}
}'
)
我想你想要:
insert into schedules(owner, name, dates) values (
1,
'work',
array[
'[2020-07-06, 2020-07-11)'::daterange,
'[2020-07-13, 2020-07-18)'::daterange
]
);
理由:
你正在使用
daterange
s,所以你不能有时间部分(为此,你需要tsrange
);正如您的代码所代表的那样,您似乎想要一个包容性下限和一个独占性上限(因此[
在左侧,)
在右侧)需要显式转换,以便 Postgres 可以识别数组元素具有正确的数据类型(否则,它们看起来像
text
)然后,您可以用
包围范围列表array[]
构造函数
owner | name | dates ----: | :--- | :---------------------------------------------------- 1 | work | {"[2020-07-06,2020-07-11)","[2020-07-13,2020-07-18)"}