【问题标题】:Weird error returned by date_trunc() in RedshiftRedshift 中 date_trunc() 返回的奇怪错误
【发布时间】: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()) 但它不起作用所以我试图了解发生了什么错了,我最终得到了我在问题描述中解释的内容

标签: sql amazon-redshift


【解决方案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

(就在底部)

【讨论】:

  • 确实可以完美运行。谢谢你启发我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 2016-03-14
  • 1970-01-01
相关资源
最近更新 更多