【问题标题】:cast on generate_series gives: ERROR: set-valued function called in context that cannot accept a set对 generate_series 进行强制转换给出:错误:在不能接受集合的上下文中调用的集合值函数
【发布时间】:2019-01-15 09:56:50
【问题描述】:

在 postgres 中,当我将天间隔添加到日期时,我得到了一个时间戳。所以我想把它放回一个日期。 我有一个 generate_series 这样的时间戳,并希望将它们转换为日期:

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);

我还有一个问题:错误信息是关于集合的。老实说,我只知道表格。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    generate_series() 返回类似于表的行的set。显然,您不能将集合转换为单一数据类型。你的演员表类似于select * from cast(some_table as date)

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

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

    【讨论】:

    • 好的,但是为什么 'select cast(generate_series(current_date-interval'7 days',current_date,'1 day')as date) 有效?
    • 因为在这种情况下,集合返回函数 (generate_series()) 也用作选择列表表达式,并表示该函数返回的单个值。一般来说,集合返回函数不应在select 列表中使用。
    • 现在我不明白你在写什么。我稍后会在这个 cmets 中问你这个问题,如果可以的话。
    • 请记住,generate_series() 之类的函数应该在 FROM 子句中使用。
    猜你喜欢
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2017-03-06
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多