Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 对generate_系列的强制转换给出:错误:在无法接受集合的上下文中调用的集值函数_Postgresql - Fatal编程技术网

Postgresql 对generate_系列的强制转换给出:错误:在无法接受集合的上下文中调用的集值函数

Postgresql 对generate_系列的强制转换给出:错误:在无法接受集合的上下文中调用的集值函数,postgresql,Postgresql,不知何故,在postgres中,当我在日期上加上一天间隔时,我会得到一个时间戳。所以我想把它追溯到一个日期。 我有一系列so时间戳,并希望将它们转换为日期: select * from cast(generate_series(current_date-interval'7 days',current_date,'1 day')as date)gs(date); 当我这样做时,我得到: ERROR: set-valued function called in context that can

不知何故,在postgres中,当我在日期上加上一天间隔时,我会得到一个时间戳。所以我想把它追溯到一个日期。 我有一系列so时间戳,并希望将它们转换为日期:

select *
from cast(generate_series(current_date-interval'7 days',current_date,'1 day')as date)gs(date);
当我这样做时,我得到:

ERROR:  set-valued function called in context that cannot accept a set
此外,如果我不使用日期,但使用整数,则不会出现错误:

select * from cast(generate_series(1,15,2)as int);
select cast(generate_series(current_date-interval'7 days',current_date,'1 day')as date)gs(date);
以下内容也没有错误:

select * from cast(generate_series(1,15,2)as int);
select cast(generate_series(current_date-interval'7 days',current_date,'1 day')as date)gs(date);
我还有另一个问题:错误消息是关于集合的。老实说,我只知道表。

generate_series()
返回一组类似于表的行。显然,您不能将集合强制转换为单个数据类型。您的演员阵容类似于
select*from cast(某些表格为日期)

您需要强制转换函数返回的值:

select gs.date::date as "date"
from generate_series(current_date - interval '7 days', current_date, '1 day') gs(date)

好的,但是为什么“选择强制转换(生成\u系列(当前\u日期间隔'7天',当前\u日期,'1天')作为日期)有效呢?因为在这种情况下,set返回函数(
generate\u系列()
)也用作选择列表表达式,并表示该函数返回的单个值。一般来说,设置返回函数不应该在
select
列表中使用。现在我不明白你在写什么。如果可以的话,我会在后面的评论中问你这个问题。请记住像
generate_series()
这样的函数应该在
FROM
子句中使用。