首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Amazon转换字符串到目前为止

Amazon转换字符串到目前为止
EN

Stack Overflow用户
提问于 2022-10-05 14:08:07
回答 2查看 158关注 0票数 2

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

我查看了Presto文档(https://prestodb.io/docs/current/functions/datetime.html),并看到了MySQL Str_to_date函数的部分,但是,当试图在雅典娜中运行下面的内容时,我会收到错误。

代码语言:javascript
运行
复制
SELECT 
MONTH,
STR_TO_DATE(CONCAT(MONTH,'01'),'%Y%m%d') 
FROM db.table 
WHERE MONTH IN ('202208')

雅典娜上的错误消息是该函数没有注册'SYNTAX_ERROR: line 3:1: Function str_to_date not registered'

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

代码语言:javascript
运行
复制
SELECT 
MONTH,
date_parse((Month),'%Y%m') 
FROM db.table 
WHERE MONTH IN ('202208')

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

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

代码语言:javascript
运行
复制
SELECT 
MONTH,
last_day_of_month(date_parse((Month),'%Y%m'))
FROM db.table 
WHERE MONTH IN ('202208')

谢谢

EN

回答 2

Stack Overflow用户

发布于 2022-10-05 14:42:10

在精神上类似于在other answer中提出的解决方案,但嵌套较少。

代码语言:javascript
运行
复制
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')是雅典娜中一种有效的日期格式,它将解析为本月的第一个日期。

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

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

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

代码语言:javascript
运行
复制
SELECT 
DATE(DATE_PARSE(dt, '%Y%m') + INTERVAL '1' month - INTERVAL '1' day) last_day_of_month
FROM (SELECT '202208' dt) t
票数 2
EN

Stack Overflow用户

发布于 2022-10-05 14:18:50

一个窍门是将文本日期解析为那个月的第一天。然后,加一个月,减去一天,得到那个月的最后一天。

代码语言:javascript
运行
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73961641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档