mysql - Amazon Athena 将字符串转换为日期

标签 mysql amazon-web-services datetime-format amazon-athena presto

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

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

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

Athena 上的错误消息是该函数未注册“SYNTAX_ERROR:第 3:1 行:函数 str_to_date 未注册”

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

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

上述输出为 2022-08-01 00:00:00.000

我的下一步是将此输出日期转换为该月的最后一天。我尝试应用月份的最后一天函数,但不支持。 MySQL 的替代方案是什么?是否有支持此功能的函数,或者我应该使用日期截断进行数学计算?

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

谢谢

最佳答案

本质上与 other answer 中提出的解决方案类似,但嵌套较少。

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 .

I have now used the date_parse function which does the conversion, however, there is a timestamp in the output. Although it won't impact how I then run reports on the back of this is there a way to remove the timestamp?

是的。您可以将 timestamp 转换为到 date通过将值传递给 DATE 即可轻松完成功能。见下文。

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

关于mysql - Amazon Athena 将字符串转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73961641/

相关文章:

java - DynamoDbAsyncClient 和 AmazonDynamoDBAsyncClient 之间的区别

java - SimpleDateFormat 未正确格式化偏移日期时间

amazon-web-services - 无法从 AWS 注销 AMI, "an error occurred attempting to deregister amis"。有谁知道原因并提供解决方案?

mysql - 如何在 AWS RDS 中复制测试场景?

PHP MySQLi 查询 - "Permission denied"

mysql-error-1064 - 我的 SQL 表神秘丢失

javascript - 使用 Javascript 检查日期是否为给定格式

javascript - 将今天的日期转换为给定格式

php - 如何在MySQL查询中获取新闻的计数作为别名列?

mysql - 将选择的mysql数据显示为<select>选项