[英]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.