如何在雅典娜的字符串数据类型上提取月份名称

How to extract month name on a string datatype on athena

SELECT sales_invoice_date,
       MONTH( DATE_TRUNC('month',
                         CASE
                           WHEN TRIM(sales_invoice_date) = '' THEN
                           DATE('1999-12-31')
                          ELSE
                           DATE_PARSE(sales_invoice_date, '%m/%d/%Y')
                         END) ) AS DT
  FROM testdata_parquet

我使用上面的查询将字符串转换为日期,并能够在 AWS athena 上获取月份编号,但我无法获取相应的月份名称

我已经试过monthnamedatename('month', ...),但他们分别给出了以下错误信息:

SYNTAX_ERROR: line 2:1: Function monthname not registered

SYNTAX_ERROR: line 2:1: Function datename not registered

您可以使用带有 'month' 参数的 to_char() 函数:

to_char(sales_invoice_date, 'month')

为了return月份名称。

Athena 当前基于 Presto .172,因此您应该参考 https://trino.io/docs/0.172/functions/datetime.html 以了解 date/time 值上的可用功能。

您可以通过 date_format():

获取月份名称
date_format(value, '%M')

或类似的 format_datetime().

format_datetime(value, 'MMM')

示例:

presto:default> SELECT date_format(current_date, '%M');
  _col0
----------
 December
(1 row)

(已在 Presto 327 上验证,但也适用于 Athena)