Redshift 中 date_trunc() 返回的奇怪错误

Posted

技术标签:

【中文标题】Redshift 中 date_trunc() 返回的奇怪错误【英文标题】:Weird error returned by date_trunc() in Redshift 【发布时间】:2019-01-25 09:56:19 【问题描述】:

所以我在 Redshift 数据库上遇到了以下奇怪的行为。

以下查询按预期运行,将当前时间戳截断为月份:

select date_trunc('month', now()) -- returns 2019-01-01 00:00:00+00

相反,这个查询:

select date_trunc('month', now())
from table

返回以下错误

错误:指定的类型或函数(每个 INFO 消息一个)不是 在 Redshift 表上受支持。

没有 INFO 消息,但显然问题与 date_trunc() 有关,因为它是唯一使用的函数。

通常我希望它会像在 PostgreSQL 上一样工作,返回截断为月份的当前时间戳与 table 的行数一样多。

我还查看了this,以防date_trunc() 尚未得到完全支持,但我找不到任何参考。

我有什么遗漏的吗?有什么解决方法吗?

【问题讨论】:

您能否尝试从实际表格中选择一列或多列?我的意思是,只为表格的每一行选择一个常数,而不是别的,这有什么意义? 是的,我有,但我仍然收到错误。我实际上试图做的是过滤行,以便只保留那些 date_trunc('month', created_at) = date_trunc('month', now()) 但它不起作用所以我试图了解发生了什么错了,我最终得到了我在问题描述中解释的内容 【参考方案1】:

now() 是一个仅领导节点的函数。这意味着如果您不使用表格,它也可以工作。

你可以使用 current_timestamp 代替 now()

例如

select date_trunc('month', current_timestamp)
from table;

这会很好用。

见https://docs.aws.amazon.com/redshift/latest/dg/Date_functions_header.html

(就在底部)

【讨论】:

确实可以完美运行。谢谢你启发我

以上是关于Redshift 中 date_trunc() 返回的奇怪错误的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中使用 DATE_TRUNC 的正确方法是啥?

如何使用带有变量的 date_trunc 作为时间戳?

休眠 current_date 和 date_trunc

时区感知 date_trunc 函数

如何在雪花 sql 中使用 date_trunc 更改默认的星期几和时间戳

BigQuery - DATE_TRUNC 错误