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 的正确方法是啥?