繁体   English   中英

Amazon Athena 将字符串转换为日期

[英]Amazon Athena Converting String to Date

我目前正在使用 AWS Athena,我希望将字符串字段“YYYYMM”转换为日期(即“202208”到 2022-08-dd)并将日期 (dd) 定义为该月的最后一天。 我首先将字符串转换为日期,然后我需要在顶部应用 function 以将其转换为该月的最后一天(通常默认情况下,日期将设置为该月的第一天)。

我正在查看 Presto 文档 ( https://prestodb.io/docs/current/functions/datetime.html ) 并遇到了 MySQL Str_to_date function 的部分,但是,当我尝试在 Athena 中运行以下内容时收到错误.

SELECT 
MONTH,
STR_TO_DATE(CONCAT(MONTH,'01'),'%Y%m%d') 
FROM db.table 
WHERE MONTH IN ('202208')

Athena 上的错误消息是 function 未注册'SYNTAX_ERROR: line 3:1: Function str_to_date not registered'

我现在使用了进行转换的 date_parse function,但是,output 中有一个时间戳。虽然它不会影响我随后运行报告的方式,但有没有办法删除时间戳?

SELECT 
MONTH,
date_parse((Month),'%Y%m') 
FROM db.table 
WHERE MONTH IN ('202208')

Output 以上为 2022-08-01 00:00:00.000

我的下一步是将这个 output 日期转换为该月的最后一天。 我尝试申请 function 月份的最后一天,但不受支持。 MySQL 的替代方案是什么? 是否有 function 支持这个,或者我应该用日期截断来计算?

SELECT 
MONTH,
last_day_of_month(date_parse((Month),'%Y%m'))
FROM db.table 
WHERE MONTH IN ('202208')

谢谢

在精神上与其他答案中提出的解决方案类似,但嵌套较少。

SELECT 
DATE_PARSE(dt, '%Y%m') + INTERVAL '1' month - INTERVAL '1' day last_day_of_month
FROM (SELECT '202208' dt) t

-- outputs 
last_date
2022-08-31 00:00

DATE_PARSE(<field>, '%Y%m')是 athena 中的有效日期格式,将解析为该月的第一个日期。

添加一个interval '1' month ,然后删除interval '1' day产生该月的最后一个日期。 您可以删除任何其他较短的时间间隔,例如,如果您删除'1' second ,您将得到时间2022-08-31 23:59:59.000

我现在使用了进行转换的 date_parse function,但是,output 中有一个时间戳。虽然它不会影响我随后运行报告的方式,但有没有办法删除时间戳?

是的。 通过将值传递给DATE function,您可以轻松地将timestamp转换为date 。见下文。

SELECT 
DATE(DATE_PARSE(dt, '%Y%m') + INTERVAL '1' month - INTERVAL '1' day) last_day_of_month
FROM (SELECT '202208' dt) t

一个技巧是将您的文本日期解析为该月的第一天。 然后,加一个月减去一天得到该月的最后一天。

WITH yourTable AS (
    SELECT '202208' AS MONTH
)

SELECT
    MONTH,
    DATE_ADD('day',
             -1,
             DATE_ADD('month',
                      1,
                      DATE_PARSE(CONCAT(MONTH, '01'), '%Y%m%d'))) AS LAST_DAY
FROM yourTable;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM