【问题标题】:Amazon Athena Date Functions [duplicate]Amazon Athena 日期函数 [重复]
【发布时间】:2022-10-23 17:56:05
【问题描述】:

我了解 Athena 使用 Presto,但是文档中的函数 last_day_of_month(x) 似乎在 AWS Athena 中不起作用。

是否有一个函数可以用来根据当前日期(2021 年 9 月 30 日)、上一年的最后一天(2021 年 12 月 31 日)和半年的最后一天(2022 年 6 月 30 日)等获取上个月的最后一天?

我使用下面的脚本来执行此操作,但是最好知道是否有可以使用的函数或更简单的方法来运行日期。

SELECT date_trunc('month', current_date) - interval '1' day
SELECT date_trunc('year',(date_trunc('month', current_date) - interval '1' day)) - interval '1' day
SELECT date_add('month',6, date_trunc('year',(date_trunc('month', current_date) - interval '1' day)) - interval '1' day)

【问题讨论】:

  • 谢谢它,我将我的工作组更新到版本 3 并测试了现在可以工作的 last_day_of_month 函数,这很棒

标签: sql date amazon-athena presto ansi


【解决方案1】:

首先,您需要升级您的 Workgroup 以使用 Athena 引擎版本 3,它已经支持 last_day_of_month(x) 功能。

Athena 基于 Presto/Trino,每个版本的 Athena 引擎都基于不同版本的开源项目。您可以从 Workgroups 菜单控制版本,甚至让 Athena 为您自动升级引擎。

其次,如果您想要获取上个月的最后一天,最简单的方法是创建下个月的第一天并从中构造一天。

SELECT date '2012-08-01' - interval '1' day

因此,如果您想要上个月的最后一天:

SELECT CAST(
        concat_ws(
            '-', 
            CAST(year(current_date) as VARCHAR),
            CAST(month(current_date) as VARCHAR),
            '01'
        ) as date
    ) 
    - interval '1' day

concat_ws 创建一个格式为 2022-10-01 的字符串,其中包含当前年份和当前月份的值。

【讨论】:

  • 谢谢 - 对 Athena 引擎和工作组的版本非常有帮助。有没有办法将这些定义为类似于 MS SQL Server 的变量,或者您是否必须为此使用准备好的语句?
  • 我认为来自 OP 的 date_trunc 方法比建议的方法更具可读性(甚至可能更高性能)。
猜你喜欢
  • 1970-01-01
  • 2018-01-21
  • 2018-12-19
  • 1970-01-01
  • 2018-09-14
  • 2022-06-21
  • 2022-01-14
  • 2021-07-03
  • 2021-11-04
相关资源
最近更新 更多